我想创建一个静态泛型函数来处理所有关于构成Dictionary并返回它的情况。 我写了这样一个函数。
public static Dictionary<string, T> GetDictionaryNameToEnum<T>(IEnumerable<T> type)
{
Dictionary<string, T> dict = new Dictionary<string, T> ();
foreach (T value in Enum.GetValues(typeof(T))) {
dict.Add (value.ToString (), value);
}
return dict;
}
但是当我调用这样的函数时。
public enum FlipType
{
normal,
y4,
x4,
y4x4,
}
static Dictionary<string, FlipType> FlipNameToType = new Dictionary<string, FlipType> ();
public static FlipType GetFlipType(string flipTypeName)
{
if (FlipNameToType == null) {
FlipNameToType = GameUtil.GetDictionaryNameToEnum (FlipType);
}
return FlipNameToType [flipTypeName];
}
我遇到了编译问题。
错误CS0118:&#39; macehead.GameWrapperBrickSet.FlipType&#39;是一种&#39;类型&#39;但是一个变量&#39;预期(CS0118)(Assembly-CSharp)
如何调用此功能?我可以这样做吗或者有更好的方法。
答案 0 :(得分:0)
此错误是可以预料的。您将FlipType
传递给您的方法,因为它是一种类型
这将正确使用您的方法:
FlipNameToType = GameUtil.GetDictionaryNameToEnum<FlipType>(null);
null
是因为IEnumerable<T> type
方法参数的使用绝对不清楚,而您实际上并未在方法中使用它。也许,您只需要删除此参数。
一般来说,您的代码过于复杂且不清楚
如果您需要知道FlipType
的名称,那么您不需要在Dictionary
中存储值,您只需使用Enum.Parse
或Enum.TryParse
:
public static FlipType GetFlipType(string flipTypeName)
{
FlipType parsed; // in C# 7.0 can be simplified into 'out FlipType parsed'
if (!Enum.TryParse<FlipType>(flipTypeName, out parsed)
{
throw new OutOfRangeException(nameof(flipTypeName));
}
return parsed;
}
请注意,如果OutOfRangeException
与任何flipTypeName
枚举值不匹配,则此代码会抛出FlipType
。但是,您的代码也是如此 - 如果在Dictionary<string, T>
中找不到密钥,它将抛出异常。
答案 1 :(得分:0)
我希望它可以帮到你。
class Program
{
static void Main(string[] args)
{
Console.Write(GetFlipType("normal"));
}
static Dictionary<string, FlipType> FlipNameToType = new Dictionary<string, FlipType>();
public static FlipType GetFlipType(string flipTypeName)
{
if (FlipNameToType == null || FlipNameToType.Count == 0)
{
FlipNameToType = default(FlipType).ToDictionaryMembersEx();
}
return FlipNameToType[flipTypeName];
}
public enum FlipType
{
normal,
y4,
x4,
y4x4,
}
}
public static class EnumExtensions
{
public static Dictionary<string, TEnum> ToDictionaryMembersEx<TEnum>(this TEnum source) where TEnum : struct, IConvertible
{
Dictionary<string, TEnum> dict = new Dictionary<string, TEnum>();
foreach (TEnum value in Enum.GetValues(typeof(TEnum)))
{
dict.Add(value.ToString(), value);
}
return dict;
}
}