我有一个泛型类,它可以帮助我对参数值进行检查
internal sealed class Argument<T>
where T : class
{
private void TraceAndThrow(Exception ex)
{
new InternalTraceHelper<T>().WriteError(ex);
throw ex;
}
internal void ThrowNull(object value, string argName)
{
if (ReferenceEquals(value, null))
{
TraceAndThrow(new ArgumentNullException(argName));
}
}
internal void ThrowIf(bool condition, string argName)
{
if (condition)
{
TraceAndThrow(new ArgumentException(null, argName));
}
}
internal void ThrowNotInEnum(Type enumType, object value)
{
if (!Enum.IsDefined(enumType, value))
{
TraceAndThrow(new ArgumentOutOfRangeException(Resources.ArgEnumIllegalVal.InvariantFormat(value)));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它与静态类一起使用时:
internal static class Class1
{
private static Argument<Class1> _arg;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误(在编译时):
静态类型不能用作类型参数
我做错了什么?
我有一组静态"枚举"类,我用它来保存有意义的变量名来表示我在输入文件上收到的无意义的代码值.这是一个例子.
Public Class ReasonCodeValue
Private Sub New()
End Sub
Public Shared ReadOnly ServiceNotCovered As String = "SNCV"
Public Shared ReadOnly MemberNotEligible As String = "MNEL"
End Class
Run Code Online (Sandbox Code Playgroud)
我想编写一个方法,接受这些静态类之一的类型和字符串值,并确定该值是否是静态字段值之一.我知道如何获取特定对象的实例字段,我知道如何获取特定类型的静态字段列表; 我无法弄清楚的是如何在没有实例的情况下获取静态字段值.这是我到目前为止所得到的.
Public Function IsValidValue(ByVal type As Type, ByVal value As String) As Boolean
Dim fields = type.GetFields(BindingFlags.Public Or BindingFlags.Static)
For Each field As FieldInfo In fields
DoSomething()
Next
End Function
Run Code Online (Sandbox Code Playgroud)
我想我可以使枚举类非静态,这样我就可以创建一个实例来传递给FieldInfo.GetValue我的验证方法.如果可以的话,我宁愿保持我的课程.
我看到一个叫做的方法GetRawConstantValue.它看起来很危险.这会给我我想要的东西吗?还有其他想法吗?
我知道有一种方法可以让enum适用于转换丰富的字符串类型 - 代码看起来不太漂亮.
有谁知道有这样的事情:
public SOMESTRUCTURE SessionKeys : string
{
value1 = "value1key",
value2 = "value2key",
name = "name"
}
Run Code Online (Sandbox Code Playgroud)
所以稍后在我的代码中我可以将其称为:
SessionKeys.value1
Run Code Online (Sandbox Code Playgroud)