如何将这些代码更改为C#.net framework 3.5?
下面是.NETFramework 4.0的代码。 但我们的旧系统使用的是3.5。很难升级所有代码。 我想知道如何将4.0编写的代码更改为3.5代码 主要问题是我不知道如何转换“return string.Join(“,”,states);” 当我试图使用.NETFramework 3.5编译它时出错 谢谢大家!如何将这些代码更改为C#.net framework 3.5?,c#,C#,下面是.NETFramework 4.0的代码。 但我们的旧系统使用的是3.5。很难升级所有代码。 我想知道如何将4.0编写的代码更改为3.5代码 主要问题是我不知道如何转换“return string.Join(“,”,states);” 当我试图使用.NETFramework 3.5编译它时出错 谢谢大家! public enum States { .... } public static string GetStates(uint stateFlags) { var stateL
public enum States
{
....
}
public static string GetStates(uint stateFlags)
{
var stateList = Enum.GetValues(typeof(States));
var states = default(States);
foreach (var state in stateList)
{
if (state == null) continue;
var stateEnum = (States)state;
if (HasState(stateFlags, stateEnum))
{
states = states | stateEnum;
}
}
return string.Join(",", states);
}
错误是
错误“string.Join(string,string[])”的最佳重载方法匹配有一些无效参数。
string.Join
在.Net 3.5中仅支持字符串数组,而.Net 4.0有额外的重载来处理IEnumerable
或对象[]
您应该将字符串[]
传递给Join
方法
更多信息请参见MSDN文档:
.Net 4:
.Net 3.5:
在.NET3.5中,用于“String.Join”的重载不可用。 将返回行替换为以下两行:
string[] stateNames = Enum.GetNames(typeof(States));
return string.Join(",", stateNames);
第二个参数应该是字符串数组。谢谢大家的热情帮助。 我将最后一行更改为以下内容:
var valuesAsList = GetValues(states).Cast<string>().ToList();
return string.Join(",", valuesAsList.ToArray());
var-valuesAsList=GetValues(states).Cast().ToList();
返回字符串.Join(“,”,valuesAsList.ToArray());
并增加了方法:
public static IEnumerable<Enum> GetValues(Enum enumeration)
{
List<Enum> enumerations = new List<Enum>();
foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
{
enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
}
return enumerations;
}
公共静态IEnumerable GetValues(枚举枚举)
{
列表枚举=新列表();
foreach(枚举.GetType()中的FieldInfo FieldInfo.GetFields(BindingFlags.Static | BindingFlags.Public))
{
添加((Enum)fieldInfo.GetValue(枚举));
}
返回枚举数;
}
编译错误消失了,但我仍然没有测试代码,看它是否与.NET4.0的结果相同
再次感谢。这是对原始解决方案的一个稍加修改的版本
public enum States
{
None = 0,
StateOne = 1,
StateTwo = 2,
StateThree = 4,
StateFour = 8,
};
public static string GetStates(uint stateFlags)
{
var stateList = Enum.GetValues(typeof(States));
List<States> states = new List<States>();
foreach (int state in stateList)
{
if ((stateFlags & state) != 0)
{
states.Add((States)state);
}
}
return string.Join(",", states);
}
公共枚举状态
{
无=0,
StateOne=1,
state2=2,
状态3=4,
状态4=8,
};
公共静态字符串GetState(uint stateFlags)
{
var stateList=Enum.GetValues(typeof(States));
列表状态=新列表();
foreach(stateList中的int状态)
{
如果((状态标志和状态)!=0)
{
州。添加((州)州);
}
}
返回字符串。Join(“,”状态);
}
运行
GetStates((uint)(States.StateOne | States.StateTwo))
输出
StateOne,StateTwo
您应该始终准确地指定发生了什么错误--只需将其复制并粘贴到问题中。感谢您的评论。错误是“与'string.Join(string,string[])匹配的最佳重载方法有一些无效参数”。该代码在.Net 4中似乎也会有相同的错误,所以我不知道你在期待什么。states
是一个枚举号。net版本接受String.Join()中的枚举。
在上面的示例中,变量“states”属于“states”类型,因此没有ToArray扩展方法…谢谢!我试过了,但无法编译。错误是:“'States'不包含'ToArray'的定义,并且找不到接受'States'类型的第一个参数的扩展方法'ToArray'(是否缺少using指令或程序集引用?)”非常感谢!你是说下面的代码现在已经使用了吗?foreach(stateList中的var state){if(state==null)continue;var stateEnum=(States)state;if(HasState(stateFlags,stateEnum)){States=States | stateEnum;}}@user1836330:我不确定您所说的“下面的代码现在已经使用”是什么意思。您是否在询问该功能是否需要工作?