Tag: C#的

在C#中传递属性作为“out”参数

假设我有: public class Bob { public int Value { get; set; } } 我想通过Value成员作为输出参数 Int32.TryParse("123", out bob.Value); 但是我得到一个编译错误, “out”参数没有被分类为variables。 有没有办法做到这一点,或者我将不得不提取一个variables,拉: int value; Int32.TryParse("123", out value); bob.Value = value;

什么是静态方法inheritance的正确select?

我明白静态方法inheritance不支持在C#中。 我还读了一些讨论(包括这里),其中开发人员声称需要这个function,典型的回应是“如果你需要静态成员inheritance,你的devise存在缺陷”。 好吧,鉴于面向对象不希望我想到静态inheritance,我必须得出结论,我明显需要它指向我的devise中的一个错误。 但是,我卡住了。 我真的很感谢一些帮助解决这个问题。 这是挑战 我想创build一个抽象的基类(我们称之为Fruit),它封装了一些复杂的初始化代码。 这段代码不能放在构造函数中,因为它的一部分依赖于虚方法调用。 Fruit将被其他具体类(Apple,Orange)inheritance,每个类都必须公开一个标准工厂方法CreateInstance()来创build和初始化一个实例。 如果静态成员inheritance是可行的,我会将工厂方法放在基类中,并使用虚拟方法调用派生类来获取具体实例必须初始化的types。 客户端代码将简单调用Apple.CreateInstance()来获取完全初始化的Apple实例。 但显然这是不可能的,所以有人可以解释我的devise需要改变以适应相同的function。

我应该怎么做“值types与'null'”可能的比较?

编写自定义NUnit约束的方法。 private void AddMatchFailure<TExpected, TActual>(string failureName, TExpected expected, TActual actual) { _matchFailures.Add( String.Format(MatchFailureFormat, failureName, (expected == null) ? "null" : expected.ToString(), (actual == null) ? "null" : actual.ToString())); } Resharper警告说, expected和actual可能是ValueType对象。 例如,TExpected是DateTime 预计== null; //但DateTime是一个结构。 将ValueType与null进行比较时的规则是什么?我应该如何编写方法来解决这个问题,而不是通过添加类约束来限制generics参数?

System.Net.WebRequest支持哪些版本的SSL / TLS?

现在SSL 3被发现容易受到POODLE攻击: 当连接到任何https Uri时,System.Net.WebRequest使用哪个版本的SSL / TLS? 我使用WebRequest连接到多个第三方API。 其中之一已经表示,他们将阻止任何使用SSL 3的请求。但是WebRequest是.Net核心框架(使用4.5)的一部分,所以它使用什么版本并不明显。

参数可以保持不变?

我正在寻找C#相当于Java的final 。 它存在吗? C#是否有如下所示的内容: public Foo(final int bar); 在上面的例子中, bar是一个只读variables,不能被Foo()改变。 有没有办法在C#中做到这一点? 例如,也许我有一个很长的方法,将使用某些对象(整数)的x , y和z坐标。 我想绝对确定函数不会以任何方式改变这些值,从而破坏数据。 因此,我想宣布他们只读。 public Foo(int x, int y, int z) { // do stuff x++; // oops. This corrupts the data. Can this be caught at compile time? // do more stuff, assuming x is still the original value. }

为什么IEnumerable <T> .ToList <T>()返回List <T>而不是IList <T>?

扩展方法ToList()返回一个List<TSource> 。 ToDictionary()返回一个Dictionary<TKey, TSource> 。 我很好奇为什么这些方法不分别inputIList<TSource>和IDictionary<TKey, TSource>的返回值。 这似乎更奇怪,因为ToLookup<TSource, TKey>其返回值作为接口而不是实际的实现。 使用dotPeek或其他反编译器查看这些扩展方法的来源,我们看到下面的实现(显示ToList()因为它更短): public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) { if (source == null) throw Error.ArgumentNull("source"); return new List<TSource>(source); } 那么为什么这种方法将其返回值作为接口的特定实现而不是接口本身呢? 唯一的变化是返回types。 我很好奇,因为IEnumerable<>扩展名在它们的签名中非常一致,除了这两种情况。 我一直认为这有点奇怪。 另外,为了使事情更令人困惑, ToLookup()的文档声明: 根据指定的键select器函数从IEnumerable创build一个Lookup。 但返回types是ILookup<TKey, TElement> 。 在Edulinq中 ,Jon Skeet提到返回types是List<T>而不是IList<T> ,但是并没有进一步触及这个主题。 广泛的search没有得到答案,所以在这里我问你: 是否有任何devise决定背后没有键入作为接口的返回值,还是只是偶然?

显式的模板类成员函数的特化

我需要专门化一些types的模板成员函数(比方说double )。 它工作正常,而类X本身不是一个模板类,但是当我做模板GCC开始给编译时错误。 #include <iostream> #include <cmath> template <class C> class X { public: template <class T> void get_as(); }; template <class C> void X<C>::get_as<double>() { } int main() { X<int> x; x.get_as(); } 这里是错误信息 source.cpp:11:27: error: template-id 'get_as<double>' in declaration of primary template source.cpp:11:6: error: prototype for 'void X<C>::get_as()' does not match any in […]

即使在我使用]的情况下,为什么GCC也会警告我有一个漏洞?

在下面的一段代码中,我使用了C ++ 1z中的标准[[fallthrough]]属性来logging下一个需要的转换: #include <iostream> int main() { switch (0) { case 0: std::cout << "a\n"; [[fallthrough]] case 1: std::cout << "b\n"; break; } } 使用GCC 7.1,代码编译没有错误。 然而,编译器仍然警告我一个下降: warning: this statement may fall through [-Wimplicit-fallthrough=] std::cout << "a\n"; ~~~~~~~~~~^~~~~~~~ 为什么?

C#generics将不允许委托types约束

是否有可能在C#中定义一个类, class GenericCollection<T> : SomeBaseCollection<T> where T : Delegate 在.NET 3.5中我无法完成这一切。 我试过使用 delegate, Delegate, Action<T> and Func<T, T> 在我看来,这在某种程度上应该是可以允许的。 我试图实现我自己的EventQueue。 我最终只是做了这个[原始逼近你]。 internal delegate void DWork(); class EventQueue { private Queue<DWork> eventq; } 但是后来我失去了对不同types的函数重复使用相同定义的能力。 思考?

什么是蹦床function?

在最近的工作讨论中,有人提到了蹦床的function。 我已阅读维基百科的描述。 给出一个function的总体思路就足够了,但是我想要一些更具体的东西。 你有一个简单的代码片段,可以说明一个蹦床吗?