Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 类与结构之间的交互_C#_.net_Struct_Class Design - Fatal编程技术网

C# 类与结构之间的交互

C# 类与结构之间的交互,c#,.net,struct,class-design,C#,.net,Struct,Class Design,好的,我项目中的一个类使用了这个方法 public static MemberName SplitTdsName(string tdsName) { NameSplitter preSplitName = new NameSplitter(tdsName); return preSplitName; } MemberName是一个结构: public struct MemberName { public string Title;

好的,我项目中的一个类使用了这个方法

public static MemberName SplitTdsName(string tdsName)
    {
        NameSplitter preSplitName = new NameSplitter(tdsName);
        return preSplitName;
    }
MemberName是一个结构:

public struct MemberName
{
    public string Title;
    public string FirstNames;
    public string LastNames;

    public MemberName(string title, string firstNames, string lastNames)            
    {            
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }
}
和Namespliter类:

public NameSplitter(string fullName)
    {
        nameInFull = fullName;
        SetAllowedTitles();
        SplitNamesAndRemovePeriods();
        SetTitles();
        MemberName splitName = new MemberName(titles, firstNames, lastNames);
        return splitName;
    }
这不起作用,因为当我将public NameSplitter更改为public MemberName NameSplitter时,splitdsname方法告诉我NameSplitter没有一个只接受一个参数的方法

我不知道如何解决这个问题,也不知道如何让它发挥作用。我是否需要将NameSplitter更改为NameSplitter静态类

注意:我知道代码是错误的

与:

public static MemberName SplitTdsName(string tdsName)
    {
        return NameSplitter.NameSplitter(tdsName);
    }

public static MemberName NameSplitter(string fullName)
    {
        nameInFull = fullName;
        SetAllowedTitles();
        SplitNamesAndRemovePeriods();
        SetTitles();
        MemberName splitName = new MemberName(titles, firstNames, lastNames);
        return splitName;
    }

    public MemberName(string title, string firstNames, string lastNames)            
    {            
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }

您的代码中有几个问题,很明显它无法编译

1) 构造函数中不能有
返回值

public NameSplitter(string fullName)
{
     ...
     return splitName;
}
2) 返回类型和返回语句必须一致。这里返回一个
NameSplitter
,但函数承诺了一个
MemberName

public static MemberName SplitTdsName(string tdsName)
{
   NameSplitter preSplitName = new NameSplitter(tdsName);
   return preSplitName;
}

快速修复(可能不完整,未经测试)

然后这个方法就变成了

public static MemberName SplitTdsName(string tdsName)
{
    NameSplitter preSplitName = new NameSplitter(tdsName);
    return preSplitName.MemberName ;
}

但我不认为MemberName应该是一个结构,类也是一个不错的选择

您的代码中有几个问题,很明显它无法编译

1) 构造函数中不能有
返回值

public NameSplitter(string fullName)
{
     ...
     return splitName;
}
2) 返回类型和返回语句必须一致。这里返回一个
NameSplitter
,但函数承诺了一个
MemberName

public static MemberName SplitTdsName(string tdsName)
{
   NameSplitter preSplitName = new NameSplitter(tdsName);
   return preSplitName;
}

快速修复(可能不完整,未经测试)

然后这个方法就变成了

public static MemberName SplitTdsName(string tdsName)
{
    NameSplitter preSplitName = new NameSplitter(tdsName);
    return preSplitName.MemberName ;
}

但我不认为MemberName应该是一个结构,类也是一个不错的选择

您应该使该方法成为一个静态方法,返回MemberName并将结果分配给MemberName变量,而不是NameSplitter(在SplitTdsName方法中)

您应该使该方法成为一个静态方法,返回MemberName并将结果分配给MemberName变量,而不是NameSplitter(在SplitdDSName方法中)

尝试实现如下类:

    public static class NameSplitter
    {
        public static MemberName Split(string fullName)
        {
            ...
            MemberName splitName = new MemberName(titles, firstNames, lastNames);
            return splitName;
        }
    }
然后使用as
MemberName mn=NameSplitter.Split(“”)

最终代码可以如下所示:

    public static class YourClass
    {
        ...
        public static MemberName SplitTdsName(string tdsName)
        {
            MemberName preSplitName = NameSplitter.Split(tdsName);
            return preSplitName;
        }
    }

    public static class NameSplitter
    {
        ...
        public static MemberName Split(string fullName)
        {
            nameInFull = fullName;
            SetAllowedTitles();
            SplitNamesAndRemovePeriods();
            SetTitles();
            MemberName splitName = new MemberName(titles, firstNames, lastNames);
            return splitName;
        }
    }

    public struct MemberName
    {
        public string Title;
        public string FirstNames;
        public string LastNames;

        public MemberName(string title, string firstNames, string lastNames)
        {
            Title = title;
            FirstNames = firstNames;
            LastNames = lastNames;
        }
    }

尝试实现类,如:

    public static class NameSplitter
    {
        public static MemberName Split(string fullName)
        {
            ...
            MemberName splitName = new MemberName(titles, firstNames, lastNames);
            return splitName;
        }
    }
然后使用as
MemberName mn=NameSplitter.Split(“”)

最终代码可以如下所示:

    public static class YourClass
    {
        ...
        public static MemberName SplitTdsName(string tdsName)
        {
            MemberName preSplitName = NameSplitter.Split(tdsName);
            return preSplitName;
        }
    }

    public static class NameSplitter
    {
        ...
        public static MemberName Split(string fullName)
        {
            nameInFull = fullName;
            SetAllowedTitles();
            SplitNamesAndRemovePeriods();
            SetTitles();
            MemberName splitName = new MemberName(titles, firstNames, lastNames);
            return splitName;
        }
    }

    public struct MemberName
    {
        public string Title;
        public string FirstNames;
        public string LastNames;

        public MemberName(string title, string firstNames, string lastNames)
        {
            Title = title;
            FirstNames = firstNames;
            LastNames = lastNames;
        }
    }
(一)

(二)

(一)

(二)


我的判断是,你必须回到你的c#bible,回顾一下你试图实现的目标和设计

要回答您的问题,请参阅返工的样品

class Program
{
    static void Main(string[] args)
    {
    }
    public static MemberName SplitTdsName(string tdsName)
    {
        NameSplitter preSplitName = new NameSplitter(tdsName);
        return preSplitName.GetMemberName();
    } 
}
public struct MemberName
{
    public string Title;
    public string FirstNames;
    public string LastNames;

    public MemberName(string title, string firstNames, string lastNames)
    {
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }
}
public class NameSplitter
{
    MemberName _memberName;
    public NameSplitter(string fullName)
    {
        _memberName = new MemberName("title", "firstName", "lastName");
    }

    public MemberName GetMemberName()
    {
        return _memberName;
    }
}

我的判断是,你必须回到你的c#bible,回顾一下你试图实现的目标和设计

要回答您的问题,请参阅返工的样品

class Program
{
    static void Main(string[] args)
    {
    }
    public static MemberName SplitTdsName(string tdsName)
    {
        NameSplitter preSplitName = new NameSplitter(tdsName);
        return preSplitName.GetMemberName();
    } 
}
public struct MemberName
{
    public string Title;
    public string FirstNames;
    public string LastNames;

    public MemberName(string title, string firstNames, string lastNames)
    {
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }
}
public class NameSplitter
{
    MemberName _memberName;
    public NameSplitter(string fullName)
    {
        _memberName = new MemberName("title", "firstName", "lastName");
    }

    public MemberName GetMemberName()
    {
        return _memberName;
    }
}
//现行守则

public struct MemberName
{
    public string Title;
    public string FirstNames;
    public string LastNames;

    public MemberName(string title, string firstNames, string lastNames)            
    {            
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }
}
//修改代码如下

public class NameSplitter
{

    // Added a property for returning splitName value thru' class
    private MemberName splitName;
    public MemberName SplitName
    {
        get { return splitName; }
        private set { splitName = value; }
    }

    public NameSplitter(string fullName)
    {
        nameInFull = fullName;
        SetAllowedTitles();
        SplitNamesAndRemovePeriods();
        SetTitles();

        splitName = new MemberName(titles, firstNames, lastNames);

       // return splitName; // Can't be done in a constructor and has to be returned via public property
    }
}
//现行守则

public struct MemberName
{
    public string Title;
    public string FirstNames;
    public string LastNames;

    public MemberName(string title, string firstNames, string lastNames)            
    {            
        Title = title;
        FirstNames = firstNames;
        LastNames = lastNames;
    }
}
//修改代码如下

public class NameSplitter
{

    // Added a property for returning splitName value thru' class
    private MemberName splitName;
    public MemberName SplitName
    {
        get { return splitName; }
        private set { splitName = value; }
    }

    public NameSplitter(string fullName)
    {
        nameInFull = fullName;
        SetAllowedTitles();
        SplitNamesAndRemovePeriods();
        SetTitles();

        splitName = new MemberName(titles, firstNames, lastNames);

       // return splitName; // Can't be done in a constructor and has to be returned via public property
    }
}

这段代码曾经编译过吗?您似乎试图
从我假设的
名称过滤器
构造函数中返回
一些东西-您不能这样做。请提供完整的
NameSplitter
代码。您的NameSplitter构造函数只能返回NameSplitter类,不能返回MemberName类。也许您需要一个简单的构造函数,然后是一个“拆分”字符串并返回MemberName的方法object@sll代码从不编译不,我意识到这种交互是错误的,我只是不知道如何使它正确。这不是交互问题,更多的是编码错误。这段代码是否编译过?您似乎试图
返回
我假设是
名称过滤器
构造函数中的某个内容-您不能这样做。请提供完整的
NameSplitter
代码。您的NameSplitter构造函数只能返回NameSplitter类,不能返回MemberName类。也许您需要一个简单的构造函数,然后是一个“拆分”字符串并返回MemberName的方法object@sll代码从不编译不。我意识到这种交互是错误的,我只是不知道如何使它正确。这不是交互问题,更多的是编码错误。我也这么想,那么,如何使该类返回MemberName呢?类不能返回任何内容。您可以为此使用静态方法,或者将结果存储在由另一个对象读取的属性中。如果我在Namespliter类中创建三个属性(titles、firstNames和LastNames),那么我可以从TdsTransformer访问这些属性并从中创建MemberName?我也这么认为,那么我如何使该类返回MemberName?类不能返回任何内容。您可以为此使用静态方法,或者将结果存储在由另一个对象读取的属性中。如果我在Namespliter类中创建了三个属性(titles、firstNames和LastNames),那么我可以从TdsTransformer访问这些属性,并从中创建MemberName?