【发布时间】:2013-07-09 14:47:18
【问题描述】:
在c#中,你能做这样的事情吗?
type typeOfInt = type(int);
int x = (typeOfInt)1;
基本上我想将类型存储为变量,因此我可以将变量用作强制转换。 我正在尝试这样做,因为在我的参数多态函数中,变量可能是 2 种类型中的 1 种。这两种类型都有我想使用的相同方法,但它不会让我使用它,因为它是变量类型。
public static void SetFolderOrderValue<T>(T item, int value, Report reportObject)
{
if (!item.Exists)
{
reportObject.Log("The folder \"" + item.Name + "\" does not exist.");
return;
}
try
{
item.SetProperty(folderOrderProperty, value);
item.Update();
}
catch (SPException ex)
{
reportObject.Log("An error occurred when saving changes to the folder \"" + item.Name + "\". Maybe due to concurrent changes from another user. Please try again after a minute.\n" + Report.GetErrorInfo(ex));
}
catch (Exception ex)
{
reportObject.Log("An error occured with \"" + item.Name + "\":\n" + Report.GetErrorInfo(ex));
}
}
如果我至少可以将强制转换存储为一个值,那么我可以在函数中传递另一个布尔值,说明它是两种类型中的哪一种。
【问题讨论】:
-
布尔值做多态性是个坏主意。你能在声明中添加必要的“where...”来获取基类,还是没有基类/接口
-
.net 中的所有对象都派生自 Object,因此所有对象都有返回 Type Object 的方法 GetType()。
-
@doctorlove,我不确定你的意思。我知道该类将是 SPFile 或 SPFolder。两者都有我上面使用的相同方法。但我不知道如何以目前使用的方式访问它们。
-
C# 泛型是编译时构造,但
GetType()方法和类型检查是运行时的人,所以你不能在这里利用静态类型。您可以使用反射或 C# 动态按名称调用任何方法,或使用as运算符检查item类型与所有可能的类型
标签: c# parametric-polymorphism