在不同命名空间的类之间强制类型转换

Shi*_*ivi 3 c# asp.net casting c#-4.0

如何在不同命名空间的类之间强制转换强制类型.

两个名称空间都具有相同的类.

Joe*_*oel 7

您不能将对象强制转换为不属于的类型.如果它属于不同的命名空间,则它不是同一个类.您将不得不创建一个转换器:

public static Namespace1.SomeClass Convert(Namespace2.SomeClass someClass) {
    Namespace1.SomeClass rtn = new Namespace1.SomeClass();
    rtn.SomeProp = someClass.SomeProp;
    rtn.SomeOtherProp = someClass.SomeOtherProp;
    return rtn;
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用反射来设置Namespace1.SomeClass上与Namespace2.SomeClass同名的所有属性.

此外,如果您拥有其中一个类的代码,则可以检查您的类上的显式隐式重载.


Mun*_*zer 7

您可以创建通用转换器,这样您就不必每次需要转换不同类型的对象时都这样做,

T ConvertObject<T>(object M) where T : class
{
    // Serialize the original object to json
   // Desarialize the json object to the new type 
 var obj = JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(M));
 return obj;
} 
// Test ObjectToCast is type Namespace1.Class, obj is Namespace2 
 Namespace2.Class obj = ConvertObject<Namespace2.Class>(ObjectToCast);
Run Code Online (Sandbox Code Playgroud)

假设两个类是相同的,这将起作用。