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;
}
}
然后使用asMemberName 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;
}
}
然后使用asMemberName 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?