0

首先,我不确定如何命名这个主题。我想要一个有字段的类,我想让其中一些有一些Properties, Fields。也许我会展示我的一些代码并稍微解释一下。

class Column
{
    public string Source { }  
    public string Destination { }
}

我希望“源”和“目的地”在其中包含更多“字段”。例如“名称”、“类型”等。

我会读一些类似的文字:

Source home(1) type[3] Destination NewYork(3) Seattle[2]

我希望能够区分我的文本的哪一部分放在“源”中,哪一部分放在“目的地”中。我该怎么做?

我知道它可能不是 100% 清楚,但我尽我所能把它写得尽可能简单。

4

3 回答 3

4

您需要定义类型并从这些属性中返回它们:

public class Column
{
    private Source _Source = new Source();
    private Destination _Destination = new Destination();

    public Source Source { get { return _Source; } }
    public Destination Destination { get { return _Destination; } }
}

public class Source
{
    public string Name { get; set; }
    public string Type { get; set; }
}

public class Destination
{
    public string Name { get; set; }
    public string Type { get; set; }
}
于 2013-08-05T07:59:27.920 回答
1

我希望“源”和“目的地”在其中包含更多“字段”

您不能这样做,因为您已指定它们具有类型字符串。

如果您觉得它们应该包含一些字段,那么请考虑将它们设为对象

 public class Source
 {
      public string Name{get;set;}
      public string Type{get;set;}
 }

然后你可以像这样编辑你的列类

public class Column
{
     public Source Source { get;set;}
}

你也可以为你的其他班级做同样的事情

于 2013-08-05T07:59:59.443 回答
1

我知道为时已晚,但这是一个可以帮助您的完整代码,如果您愿意,请尝试一下。

class Column
{
  string plainText;
  Regex reg = new Regex(@"(Source\b\w+\b\w+\b)(Destination\b\w+\b\w+\b)");
  public Source Source {
    get {
        Match m = reg.Match(plainText);
        Group source = m.Groups[0];
        string[] s = source.Value.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
        return m.Success ? new Source(new string[]{s[1],s[2]}) : null;
    }
    set {
        Match m = reg.Match(plainText);
        Group dest = m.Groups[1];
        if(m.Success) plainText = value + " " + dest.Value;            
    }
  }
  public Destination Destination { 
    get {
        Match m = reg.Match(plainText);
        Group dest = m.Groups[1];
        string[] s = dest.Value.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
        return m.Success ? new Destination(new string[]{s[1], s[2]}) : null;
    }
    set {
        Match m = reg.Match(plainText);
        Group source = m.Groups[0];
        if(m.Success) plainText = source.Value + " " + value;
    }
  }
  //This is used to change the plainText
  //for example: SetPlainText("Source home(1) type[3] Destination NewYork(3) Seattle[2]");
  public void SetPlainText(string txt){
    plainText = txt;
  }
}
public class Source
{
  public Source(string[] s){
     Name = s[0];
     Type = s[1];
  }
  public string Name { get; set; }
  public string Type { get; set; }
  public override string ToString(){
     return string.Format("Source {0} {1}",Name,Type);
  }
}

public class Destination
{
  public Destination(string[] s){
    Name = s[0];
    Type = s[1];
  }
  public string Name { get; set; }
  public string Type { get; set; }
  public override string ToString(){
     return string.Format("Destination {0} {1}",Name,Type);
  }
}
于 2013-08-05T08:42:21.877 回答