如何使下面的代码通用,这样我最终可以用一个简单的函数来代替多个类中的多个函数?
下面对FindObject和CreateObject的调用是第三方库的一部分,所以我无法控制参数,这就是我遇到的问题.
private MyClass1 FindClass1Object( string code )
{
MyClass1 myObject = FindObject<MyClass1>( code );
if ( myObject == null )
{
myObject = CreateObject<MyClass1>( );
myObject.Code = code;
}
return myObject;
}
private MyClass2 FindClass2Object( string code )
{
MyClass2 myObject = FindObject<MyClass2 >( code );
if ( myObject == null )
{
myObject = CreateObject<MyClass2 >( );
myObject.Code = code;
}
return myObject;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以传入一个额外的参数来指定我正在寻找/创建的类型但是然后代码卡在FindObject和CreateObject的调用上.
private object ReadClassFromXml ( string code, Type myType )
{
object myObject = FindObject<myType>( code );
if ( myObject == null )
{
myObject = CreateObject<myType>( );
myType.GetProperty("Code").SetValue(myObject, code, null);
}
return myObject;
}
Run Code Online (Sandbox Code Playgroud)
要使方法通用,您需要添加泛型类型definition(<myType>),而不需要使用指定类型的第二个参数(即Type myType不需要).您还应该返回泛型类型,而不是object.我也会重命名myType为T,因为通常用名称开头的通用参数命名T.总体而言,您的代码看起来像这样:
// Method has generic parameter <T> and returns result of type T:
private T ReadClassFromXml<T>( string code)
{
object myObject = FindObject<T>( code );
if ( myObject == null )
{
myObject = CreateObject<T>( );
myType.GetProperty("Code").SetValue(myObject, code, null);
}
return myObject;
}
Run Code Online (Sandbox Code Playgroud)