C#将T转换为long

C#将T转换为long,c#,generics,types,int,C#,Generics,Types,Int,我有一个通用类(C#) 但似乎什么都不管用 有什么想法吗?打电话给Convert.ToInt64 写入(对象)文件位置将创建一个装箱的UInt32 ,因此不能一步将其强制转换为long 您可以编写(long)(ulong)fileLocation,但出于同样的原因,对于uint,该操作将失败。您可以使用TryParse: long lng; int testNum = 55; long.TryParse(testNum.ToString(),out lng); 试试看 如果我写的是 publi

我有一个通用类(C#)

但似乎什么都不管用


有什么想法吗?

打电话给
Convert.ToInt64

写入
(对象)文件位置
将创建一个装箱的
UInt32

,因此不能一步将其强制转换为
long

您可以编写
(long)(ulong)fileLocation
,但出于同样的原因,对于
uint
,该操作将失败。

您可以使用TryParse:

long lng;
int testNum = 55;
long.TryParse(testNum.ToString(),out lng);
试试看


如果我写的是

public MyClass<long> myclass = new MyClass<long>();
    public long returnLong() 
            {
                return myclass.filelocation;
            }
public MyClass MyClass=new MyClass();
公众长时间返回长时间()
{
返回myclass.filelocation;
}

myclass.fileLocation返回long by defult

需要一个字符串作为输入参数,而不是
UInt32
UInt64
,即它不会编译!同样,该类应该有一个
IConvertible
constraint@Broken:否
Convert.ToInt64
接受一个
对象
。然而,你是对的;它应该有这样的限制。我最终把所有的东西都改写成了非泛型。因为T只能是两个值中的一个,所以我在其中放了一些if语句,在重要的地方。。。但这是我重写之前的路线。如果你有一个泛型类/方法,它只接受uint或ulong,那么你可能滥用或误用泛型。泛型应该是泛型的。为什么不让一个非泛型类接受一个ulong呢?uint将自动转换为ulong。我正在使用PST文件格式。它有两种格式,ANSI(UInt32)和UNICODE(UInt64)。我这样做是为了(希望)减少代码duplication@Eric我走了你的路线。我把它改写成非一般性的。
long lng;
int testNum = 55;
long.TryParse(testNum.ToString(),out lng);
long loc = Convert.ToInt64(myclass.filelocation);
public MyClass<long> myclass = new MyClass<long>();
    public long returnLong() 
            {
                return myclass.filelocation;
            }