我有一个类:Constants.cs
代码:
namespace DataAccess.Utilities
{
public class Constants
{
public enum ReturnCode
{
Fail = -1,
Success = 0,
Warning = 1
}
}
}
这是我的直播课程代码
public static T DirectCast<T>(object o) where T : class
{
T value = o as T;
if (value == null && o != null)
{
throw new InvalidCastException();
}
return value;
}
以下是我的错误代码
code = DirectCast<Constants.ReturnCode>(int.Parse(db.GetParameterValue(command, "RESULTCODE").ToString().Trim()));
错误讯息:
错误2类型&#39; DataAccess.Utilities.Constants.ReturnCode&#39;必须是参考类型才能将其用作参数&#39; T&#39;在泛型类型或方法中&#39; DataAccess.DataManager.QueueingManager.DirectCast(object)&#39;
在我从.net vb使用DirectCast之前,但是在c#中不存在DirectCast,所以我尝试搜索并获得一些代码,介绍如何创建与vb具有相同功能的DirectCast。
答案 0 :(得分:1)
在.NET中,有值类型和引用类型。类是引用类型,例如,它们就像C ++中的指针一样。 int是值类型,枚举也是。 在泛型中,只有引用类型可以用作类型参数。
您可以删除方法的通用性,但您无法知道返回类型。而且,&#34; as&#34;不能使用enum,因为它是一种值类型。
我不明白为什么你想要一个枚举,你可以解析它:
Enum.Parse(typeof(Constants.ReturnCode), db.GetParameterValue(command, "RESULTCODE").ToString().Trim()));
答案 1 :(得分:0)
code = DirectCast<Constants.ReturnCode>(int.Parse(db.GetParameterValue(command, "RESULTCODE").ToString().Trim()));
应改为:
code = DirectCast<Constants>(int.Parse(db.GetParameterValue(command, "RESULTCODE").ToString().Trim()));
或者,这样做:见工作示例:
class Program
{
static void Main(string[] args)
{
var fail = Constants.DirectCast<Constants.ReturnCode>(-1);
var success = Constants.DirectCast<Constants.ReturnCode>(0);
var warning = Constants.DirectCast<Constants.ReturnCode>(1);
Console.WriteLine(fail);
Console.WriteLine(success);
Console.WriteLine(warning);
Console.ReadLine();
}
}
public class Constants
{
public enum ReturnCode
{
Fail = -1,
Success = 0,
Warning = 1
}
public static T DirectCast<T>(object o)
{
T value = (T)o;
if (value == null && o != null)
{
throw new InvalidCastException();
}
return value;
}
}
答案 2 :(得分:0)
感谢您的评论。最后我的代码工作。
public class Constants
{
public enum ReturnCode
{
Fail = -1,
Success = 0,
Warning = 1
}
}
public static T DirectCast<T>(object o)
{
T value= (T)o;
if (value== null && o != null)
{
throw new InvalidCastException();
}
return value;
}
code = Constants.DirectCast<Constants.ReturnCode>(int.Parse(db.GetParameterValue(command, "RESULTCODE").ToString().Trim()));