Tag: 类型推理

不能使用三元运算符来分配Linq表达式

我只输入以下代码: Expression<Func> expression = fileTypeGroupID.HasValue ? n => n.Document.MimeType.FileTypeGroupID == fileTypeGroupID.Value : n => true; Visual Studio说它无法推断出n的类型。 代码对我来说似乎很好 – 它只是使用三元运算符将两个Expression文字中的一个指定给Expression变量。 Visual Studio是不是很聪明,无法推断出三元运算符中的n类型,还是我犯了某种错误?

方法推理不适用于方法组

考虑 void Main() { var list = new[] {“1”, “2”, “3”}; list.Sum(GetValue); //error CS0121 list.Sum(s => GetValue(s)); //works ! } double GetValue(string s) { double val; double.TryParse(s, out val); return val; } CS0121错误的描述是 以下方法或属性之间的调用不明确: ‘System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable, System.Func)’和’System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable, System.Func )’ 我不明白的是,什么信息s => GetValue(s)给编译器简单的GetValue不 – 对于前者不是后者的语法糖?

C#中可能的部分generics类型推断?

我正在为我的IoC类库重写我的流畅界面,当我重构一些代码以便通过基类共享一些常用function时,我遇到了麻烦。 注意 :这是我想要做的事情,而不是我必须做的事情。 如果我必须使用不同的语法,我会,但如果有人知道如何使我的代码以我想要的方式编译,那将是非常受欢迎的。 我希望某些扩展方法可用于特定的基类,并且这些方法应该是通用的,具有一个generics类型,与方法的参数相关,但是这些方法还应返回与特定后代相关的特定类型。被引用。 使用代码示例比上面的描述更好。 这是一个简单而完整的例子, 它不起作用: using System; namespace ConsoleApplication16 { public class ParameterizedRegistrationBase { } public class ConcreteTypeRegistration : ParameterizedRegistrationBase { public void SomethingConcrete() { } } public class DelegateRegistration : ParameterizedRegistrationBase { public void SomethingDelegated() { } } public static class Extensions { public static ParameterizedRegistrationBase Parameter( this ParameterizedRegistrationBase p, string […]