我正在使用其他人的代码并尝试进行一些修改。所以我需要做的是采取以下措施:
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 Class和C#: Instantiate an object with a runtime-determined type,并编写了以下代码:
RemoteFilesDP remoteFile = (RemoteFileDP)Activator.CreateInstance(typeof(RemoteFileDP), locationDirectory);
但是我一直收到一个“MissingMethodException”错误,找不到RemoteFileDP的构造函数,但我确实有如下所示的构造函数:
public RemoteFileDP()
{
} //end of RemoteFilePlattsDP constructor
提前感谢您的协助!
答案 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
更多的想法,但您可以在RemoteFileDP
和string
之间定义隐式或显式转换运算符:
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#中了解explicit
和implicit
转换很有用,如果您还没有。