我不明白这里发生了什么......
我有以下错误:
该类型'TestApp.TestVal'
不能用作'T'
泛型类型或方法中的类型参数'TestApp.SomeClass<T>'
.没有来自装箱转换'TestApp.TestVal'
到'System.IComparable<TestApp.TestVal>'
.
以下代码发生此错误:
public enum TestVal
{
First,
Second,
Third
}
public class SomeClass<T>
where T : IComparable<T>
{
public T Stored
{
get
{
return storedval;
}
set
{
storedval = value;
}
}
private T storedval;
}
class Program
{
static void Main(string[] args)
{
//Error is on the next line
SomeClass<TestVal> t = new SomeClass<TestVal>();
}
}
Run Code Online (Sandbox Code Playgroud)
由于枚举是int
默认的并且int实现了IComparable<int>
接口,所以看起来应该没有错误....
我知道,有一个很大的区别IComparable
,并IComparable<T>
在一般情况下,看到这,但在这个搜索方法就没有任何区别,还是会?
public static int Search<T>(List<T> a, T target) where T : IComparable
{
for (int i = 0; i < a.Count; i++)
{
if (target.CompareTo(a[i]) == 0)
return i;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
相比:
public static int Search<T>(List<T> a, T target) where T : IComparable<T>
{
...
}
Run Code Online (Sandbox Code Playgroud)
两者都会起作用并给出相同的结果吗?
我有一个类型,它在实现IComparable<T>
和IComparable
. 我没有从 LINQ 得到我期望的结果,基本上看起来好像IComparable<T>
没有应用该类型实现的。
我以为我会用以下形式的表达式得到我想要的结果:
var result = MyEnumerable<T>.OrderBy(r => r);
Run Code Online (Sandbox Code Playgroud)
其中T
自身实现IComparable<T>
。它没有发生。
我可以看到相关的问题,其中IComparable<T>
为排序指定了特定的类,但我找不到一个使用自己IComparable<T>
实现的默认值的问题T
。
我的语法显然不正确。请问正确的语法是什么?
提前致谢。
我正在使用此代码来排序数字基础下降的列表
ItemsList.OrderByDescending(x => x.Views, new IntComparer());
public class IntComparer : IComparer<long>
{
IComparer<long> Members;
public int Compare(long x, long y)
{
return Math.Sign(x - y);
}
}
Run Code Online (Sandbox Code Playgroud)
但它根本没有订购:S任何帮助PLZ
icomparablet ×4
c# ×3
generics ×2
sql-order-by ×2
enums ×1
icomparable ×1
icomparer ×1
linq ×1