如何使用未知类型的AS关键字
本文关键字:AS 关键字 类型 何使用 未知 | 更新日期: 2023-09-27 18:27:08
我正在尝试使用未知类型的AS关键字。这是我的代码:
public GetData(Type MyType, string CSVPath)
{
var engine = new FileHelperEngine(MyType);
try
{
_Data = engine.ReadFile(CSVPath) as MyType; //error here
}
catch(Exception ex)
{
Console.WriteLine("Error occured: " + ex.Message);
}
}
正如你在这段代码中看到的,如果MyType是,我会得到一个错误。有没有更好的方法来完成
使用通用方法,而不是传入Type
作为参数:
public void GetData<T>(string CSVPath)
{
var engine = new FileHelperEngine(typeof(T));
_Data = engine.ReadFile(CSVPath) as T;
if (_Data != null)
{
//correct type, do the rest of your stuff here
}
}
我不确定自己是否理解。首先,使用as
不会抛出异常,它只是返回null。
其次,我很确定您不想强制转换,您只想检查类型,所以您需要is
运算符。但由于MyType
仅在运行时才为人所知,因此确实需要进行反思。很简单:
object o = engine.Readfile(CSVPath);
if(MyType.IsAssignableFrom(o.GetType())
_Data = o;
else
Console.WriteLine("Mismatching types: {0} is not of type {1}", o.GetType(), MyType);
注意:我假设_Data
的类型是object
,否则,您只需将as
运算符与_Data
的类型一起使用。
这里有一个这样做的类,尽管我很难为这样的动态演员阵容想出一个好的例子。:
using System;
namespace Test
{
class Program
{
private object _data;
static void Main(string[] args)
{
new Program().EntryPoint();
}
public void EntryPoint()
{
GetData(typeof(string), "Test");
Console.WriteLine(_data);
}
public void GetData(Type myType, string csvPath)
{
var engine = new FileHelperEngine(myType, csvPath);
// This is the line that does it.
_data = Convert.ChangeType(engine.ReadFile(csvPath), myType);
}
private class FileHelperEngine
{
public string Value { get; set; }
public FileHelperEngine(Type t, string value) { Value = value.ToString(); }
public string ReadFile(string path) { return Value; }
}
}
}