完全出于节省代码输入的兴趣,我想找到某种方法将文本附加到另一个类返回的成员。这可能没有意义,所以举个例子。我正在研究的是一个管理测试数据的类:
public class TestFiles
{
private const string File1RelativePath = @"TestData\File1.xml";
private const string File2RelativePath = @"TestData\File2.xml";
private static string RootPath()
{
// don't know the deployment location until runtime
return Some_DirectoryName_Determined_At_Run_Time_Returned_BySomeOtherModule();
}
public static string File1
{
get { return Path.Combine(RootPath() + File1RelativePath); }
}
public static string File2
{
get { return Path.Combine(RootPath() + File2RelativePath); }
}
}
这个类完全符合我的要求,我可以简单地通过以下方式调用它:
String FileToUseForTest = TestFiles.File1;
问题是我很懒,当我添加更多文件时,我必须在两个地方进行:常量字符串和获取属性。也许我可以在 getter 中包含字符串文字,但即便如此,我也必须在每个 getter 中调用 Path.Combine(RootPath() ... ,这对我来说工作量太大了。
因此,尝试另一种方法,由于以下原因,该方法不起作用:
public class TestFiles
{
public class FileRelativePaths
{
private const string File1RelativePath = @"TestData\File1.xml";
private const string File2RelativePath = @"TestData\File2.xml";
}
private static FileRelativePaths relPaths = new RulePackages();
FileRelativePaths FullPaths
{
get { return relPaths; }
}
private static string RootPath()
{
// No longer called, but somehow need to find a way to append to paths returned in FullPaths
return Some_DirectoryName_Determined_At_Run_Time_Returned_BySomeOtherModule();
}
}
这几乎可行,我得到了强类型,调用者可以通过
String FileToUseForTest = TestFiles.FullPaths.File1;
但问题是这只是给了我相对路径,我真的想在返回的字符串中附加一些代码(通过使用方法 RootPath())。
那么,有什么方法可以让它工作,同时仍然具有强类型并将代码长度保持在最低限度?我有点接受使用上面的第一种方法,但我想我会问是否有创造性的解决方案。