Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将这些代码更改为C#.net framework 3.5?_C# - Fatal编程技术网

如何将这些代码更改为C#.net framework 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

下面是.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 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:我不确定您所说的“下面的代码现在已经使用”是什么意思。您是否在询问该功能是否需要工作?