我正在尝试在数字类型上编写一个扩展方法,以便在我正在构建的流畅测试框架中使用.基本上,我想这样做:
public static ShouldBeGreaterThan<T>(this T actual, T expected, string message)
where T : int || T: double || etc...
Run Code Online (Sandbox Code Playgroud)
只是where T : struct不这样做,因为这也将匹配string和bool,可能别的东西,我忘了.有什么我可以做的只匹配数字类型?(实现的具体类型>和<运营商,这样我就可以对它们进行比较.如果这意味着我匹配日期为好,它其实并不重要-扩展仍然会做我的期望.)
考虑
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;
}
Run Code Online (Sandbox Code Playgroud)
CS0121错误的描述是
以下方法或属性之间的调用是不明确的:
'System.Linq.Enumerable.Sum<string>(System.Collections.Generic.IEnumerable<string>, System.Func<string,decimal>)'和'System.Linq.Enumerable.Sum<string>(System.Collections.Generic.IEnumerable<string>, System.Func<string,decimal?>)'
我不明白的是,什么信息s => GetValue(s)给编译器根本GetValue不-不是前者,后者的语法糖?
如何检查某种类型是否实现某个运算符?
struct CustomOperatorsClass
{
public int Value { get; private set; }
public CustomOperatorsClass( int value )
: this()
{
Value = value;
}
static public CustomOperatorsClass operator +(
CustomOperatorsClass a, CustomOperatorsClass b )
{
return new CustomOperatorsClass( a.Value + b.Value );
}
}
Run Code Online (Sandbox Code Playgroud)
以下两次检查应返回true:
typeof( CustomOperatorsClass ).HasOperator( Operator.Addition )
typeof( int ).HasOperator( Operator.Addition )
Run Code Online (Sandbox Code Playgroud) 我有一个接受IEnumerable-decimals并执行各种数学函数的方法。我想对IEnumerable-int-使用相同的方法。我该如何实施?例如找到一个简单的总和?
void Calculate<T>(IEnumerable <T> ListOFNumbers)
{
int count= ListofNumbers.Count();
?sum=?;
}
Run Code Online (Sandbox Code Playgroud)