C# - 将字符串转换为类对象

时间:2011-07-07 22:57:55

标签: c# string class

我正在使用其他人的代码并尝试进行一些修改。所以我需要做的是采取以下措施:

RemoteFileDP remoteFile = new DPFactory().CreateRemoteFileDP(configData);

并更改它,以便remoteFile可以等于字符串变量中的内容。为了进一步解释,让我再提供一些代码:

ConfigDP configData = new ConfigDP();

所以上面的语句是在remoteFile语句和ConfigDP之前执行的,它上面有两个类(抽象Config,然后是它的base:abstract ConfigBase)。 DP也是它上面两个抽象类的子代(抽象RemoteFile和抽象RemoteFileBase)。

从我的理解中,remoteFile是从数据库查询中提取的数据的结果,存储在列表或Hashtable中(对不起只是实习生所以我正在研究这个)。

我需要remoteFile接受字符串值的原因是因为有许多方法利用了remoteFile中的信息,我希望避免创建一个接受字符串值而不是RemoteFileDP remoteFile的重载方法的WHOLE BUNCH。

所以,如果我可以采用字符串值,如:

string locationDirectory;

从另一个方法传入,然后类似于以下内容:

RemoteFileDP remoteFile = locationDirectory;

然后使用remoteFile的所有其他方法不必重载或更改。

对不起所有细节,但这是我第一次发帖,所以我希望我提供了足够的信息。我确实查看了C# Convert dynamic string to existing ClassC#: Instantiate an object with a runtime-determined type,并编写了以下代码:

RemoteFilesDP remoteFile = (RemoteFileDP)Activator.CreateInstance(typeof(RemoteFileDP), locationDirectory);

但是我一直收到一个“MissingMethodException”错误,找不到RemoteFileDP的构造函数,但我确实有如下所示的构造函数:

public RemoteFileDP()
    {
    } //end of RemoteFilePlattsDP constructor

提前感谢您的协助!

3 个答案:

答案 0 :(得分:2)

如果您不想修改RemoteFileDP所在(或不能)的源项目,您可以编写扩展方法,如下所示:

public static RemoteFileDP ConvertToRemoteFileDP(this string location)
{
    // Somehow create a RemoteFileDP object with your 
    // location string and return it
}

这样你可以运行你想要的代码行:

RemoteFileDP remoteFile = locationDirectory;

稍作修改如下:

RemoteFileDP remoteFile = locationDirectory.ConvertToRemoteFileDP();

这会让您解决问题吗?

答案 1 :(得分:1)

你错过了一个以string为参数的构造函数。尝试使用

编写代码
public RemoteFileDP(string locationDirectory)
{
    // do stuff with locationDirectory to initialize RemoteFileDP appropriately
}

当然,如果你这样做,为什么不直接调用构造函数呢?

RemoteFileDP remoteFile = new RemoteFileDP(locationDirectory);

答案 2 :(得分:1)

虽然我喜欢构造函数接受string更多的想法,但您可以在RemoteFileDPstring之间定义隐式或显式转换运算符:

 class RemoteFileDP
 {
      ....

      public static implicit operator RemoteFileDP(string locationDictionary)
      {
           //return a new and appropiately initialized RemoteFileDP object.
           //you could mix this solution with Anna's the following way:
           return new RemoteFileDP(locationDictionary);
      }
 }

这样你实际上可以写:

 RemoteFileDP remoteFile = locationDirectory;

或者,如果转换运算符是明确的:

 RemoteFileDP remoteFile = (RemoteFileDP)locationDirectory;

我仍然坚持认为,安娜李尔的解决方案更好,因为隐式或显式转换似乎并不是最适合这种情况。例如,如果转换因无效locationDictionary值而失败,那么我不会推荐此路径。如果转换始终是成功的,无论locationDictionary是什么价值(禁止null),那么它可能是您问题的有效解决方案。

我只是把它放在桌面上,因为我认为您可能会发现在C#中了解explicitimplicit转换很有用,如果您还没有。