返回不同类型的类-最佳选择?

时间:2018-12-15 12:18:09

标签: c# class

我需要一个可以与字符串属性一起使用的类,以将数据存储在结构化的(类)列表上,但是具有相同的类型,以便有一种方法可以返回索引,该索引充当我设置数据的顺序。 / p>

该类可以是这样的:

public class MyClass
{
    public int int1 = 0;
    public int int2 = 0;
    public int int3 = 0;
    public int int4 = 0;

    public string string1 { get; set; }
    public string string2 { get; set; }
    public string string3 { get; set; }
    public string string4 { get; set; }
}

然后我可以使用我的类以类结构化格式存储数据:

string fileName = @"C:\Mylocation\MyTextFileToRead.txt";    //tab delimeted file
Encoding fileEncoding = Encoding.ASCII;
List<MyClass> myDataList = new List<MyClass>();
List<string> simpleData = File.ReadAllLines(fileName, fileEncoding).ToList();
MyClass index = new MyClass();

foreach (var line in simpleData)
{
    var lineSplit = line.Split('\t');
    MyClass myClassElement = new MyClass
    {
        string1 = lineSplit[index.int1],
        string2 = lineSplit[index.int2],
        string3 = lineSplit[index.int3],
        string4 = lineSplit[index.int4],
    };
    myDataList.Add(myClassElement);

}

我使用索引来映射文本文件中的每个属性,然后将每个字段值存储在相应的字符串属性中。

我不希望使用对象类型,而是拥有返回字符串值并将其强制转换为(int)索引的属性。建议我不要使用尽可能多的对象。 除非我使用类的类型名称(而不是类的实例),否则使用Const字段不适用于索引,但是我不知道它是否有帮助,或者这是否是更好的编程选择。

我不确定是否有更好的方法,但是会收到相关反馈非常欢迎。

3 个答案:

答案 0 :(得分:2)

要从一个函数返回两种不同的类型,可以使用introduce in C# 7.3

它是这样的:

public (int, string) MyFunc()
{
    //do something
    return (VarThatInt, VarThatString);
}

//and in main class u call it like this:

(varInt, varString) = MyFunc();

答案 1 :(得分:1)

使用KeyValuePair存储一个属性和索引,使用KeyValuePair列表存储一行,并使用dic字典存储文件。

      List<int> orderIndexList = new List<int> { 2, 1, 4, 0 };
        Dictionary<int, List<KeyValuePair<int, string>>> data = new Dictionary<int, List<KeyValuePair<int, string>>>();

        int lineNumber = 0;
        foreach (var line in simpleData)
        {
            var lineSplit = line.Split('\t');
            List<KeyValuePair<int, string>> listLine = new List<KeyValuePair<int, string>>();
            orderIndexList.ForEach(index => listLine.Add(new KeyValuePair<int, string>(index, lineSplit[index])));
            data.Add(++lineNumber, listLine);
        }
        return data;

答案 2 :(得分:0)

返回一个具有两个所需输出的类。您甚至可以返回第三个变量来告诉接收代码,以使用哪个输出。

public myClass{   
  String TextValue;
  int NumberValue;
  bool IsReturnString; 
}

您将返回myClass的对象。