假设我们有一些方法
public class SomeClass
{
public Sth GetByKey(string key)
{
//not important
}
}
static class SomeKeys
{
public static string Abc = "Abc";
public static string Xyz = "Xyz";
}
并且无法更改。是否有一种相对简单的方法可以将传递给此方法的值限制为某些项目中类SomeKeys
的字段?因此a.GetByKey("Qwerty")
和a.GetByKey("Abc")
会产生一些警告或错误,而a.GetByKey(SomeKeys.Abc)
则不会。
我知道这是一个糟糕的设计等等,我不会寻找一种重构方法。现在我很好奇,如果可能的话。我正在考虑写一些postharp魔法,但我不知道它是否值得麻烦。它可能在编译期间显示错误,或者它可能是resharper中的一些神奇规则或完全不同的东西。
修改
此外,我不想更改GetByKey
的调用,参数类型必须是字符串。
答案 0 :(得分:3)
原始类不需要重构或更改,只需在SomeClass(NewSomeClass)上创建一个包含强类型的包装类,开始在任何地方使用NewSomeClass。比实施一些需要部署到整个团队的Roslyn / Resharper技巧更容易。
public class NewSomeClass
{
private SomeClass inner;
private NewSomeClass(SomeClass inner)
{
this.inner = inner;
}
public Sth GetByKey(SomeKey key)
{
return this.inner.GetByKey(key.Value);
}
}
public sealed class SomeKey
{
SomeKey(string val)
{
this.Value = val;
}
public string Value {get;}
public static readonly SomeKey Abc = new SomeKey("Abc");
public static readonly SomeKey Xyz = new SomeKey("Xyz");
}