C# 在运行时输入枚举
我有一个方法C# 在运行时输入枚举,c#,dynamic,parameters,enums,runtime,C#,Dynamic,Parameters,Enums,Runtime,我有一个方法GenerateOutput,它打印字符串列表。该方法将多个枚举作为参数,并根据在方法中输入的标志输出结果。我知道枚举是为编译时设计的,但是否可以根据用户在程序中选择的选项在运行时更改输出? 基本上,我有各种复选框来表示可能的枚举。当用户选择一个选项时,该标志应作为参数添加到GenerateOutput方法中。这能做到吗?谢谢我认为您想要做的(我不确定是否完全理解您的问题)是在运行时建立一个枚举值以传递到函数中 假设使用[flags]属性指定枚举: [flags] public en
GenerateOutput
,它打印字符串列表。该方法将多个枚举作为参数,并根据在方法中输入的标志输出结果。我知道枚举是为编译时设计的,但是否可以根据用户在程序中选择的选项在运行时更改输出?
基本上,我有各种复选框来表示可能的枚举。当用户选择一个选项时,该标志应作为参数添加到
GenerateOutput
方法中。这能做到吗?谢谢我认为您想要做的(我不确定是否完全理解您的问题)是在运行时建立一个枚举值以传递到函数中
假设使用[flags]属性指定枚举:
[flags]
public enum TestEnumerations
{
Value1 = 1,
Value2 = 2,
Value3 = 4,
//etc
}
然后你可以这样做:
// In checkbox handlers, e.g.
tEnums |= TestEnumerations.Value1;
// Where you call the method
GenerateOutput(tEnums);
或者,正如Francisco在评论中所建议的那样,创建一个列表(如果您只希望每个枚举值出现一次,则创建一个哈希集):
我认为您想要做的(我不确定我是否完全理解您的问题)是在运行时建立一个Enum值以传递到函数中 假设使用[flags]属性指定枚举:
[flags]
public enum TestEnumerations
{
Value1 = 1,
Value2 = 2,
Value3 = 4,
//etc
}
然后你可以这样做:
// In checkbox handlers, e.g.
tEnums |= TestEnumerations.Value1;
// Where you call the method
GenerateOutput(tEnums);
或者,正如Francisco在评论中所建议的那样,创建一个列表(如果您只希望每个枚举值出现一次,则创建一个哈希集):
请给出GenerateOutput函数的示例/代码。这只是测试代码,可以让它正常工作。该方法只是
void GenerateOutput(TestEnumerations tEnums)
并将tEnums
值打印到控制台。我想在运行时输入多个十位数。为什么不输入多个十位数,用逗号或其他字符分隔,然后在方法中解析?比如:t1,t2,然后对每一个值使用string.split(','),然后使用Enum.Parse?你的意思是像void GenerateOutput(List tEnums)这样的东西吗?我还不太明白…谢谢你的帮助。抱歉,我不在dev机器旁,但我记得那是一堆console.writeline。问题是,此方法必须在无法修改参数的情况下工作,因此我需要按照Jackson Pope的回答使用|=
。请给出生成输出函数的示例/代码。这只是测试代码,以使其工作。该方法只是void GenerateOutput(TestEnumerations tEnums)
并将tEnums
值打印到控制台。我想在运行时输入多个十位数。为什么不输入多个十位数,用逗号或其他字符分隔,然后在方法中解析?比如:t1,t2,然后对每一个值使用string.split(','),然后使用Enum.Parse?你的意思是像void GenerateOutput(List tEnums)这样的东西吗?我还不太明白…谢谢你的帮助。抱歉,我不在dev机器旁,但我记得那是一堆console.writeline。问题是,这个方法必须在不能修改参数的情况下工作,所以我需要按照Jackson Pope的回答使用|=
。谢谢。我不知道你能做什么。应该可以了。只有当值是2的幂并且设置了[flags]属性时,它才会起作用。谢谢。我不知道你能做什么。这样就可以了。只有当值是2的幂并且设置了[flags]属性时,它才会起作用。