【问题标题】:Issue with passing parameters传递参数的问题
【发布时间】:2013-07-08 11:38:30
【问题描述】:

在我的应用程序中,以下是 getter/setter:

    private string client { get { return ClientText.Text; } set { ClientText.Text=value;} }
    private string application { get { return ApplicationText.Text; } set { ApplicationText.Text = value; } }
    private string starttime { get { return StartTimeText.Text; } set { StartTimeText.Text = value; } }
    private string stoptime { get { return StopTimeText.Text; } set { StopTimeText.Text = value; } }
    private string task { get { return TaskText.Text; } set { TaskText.Text = value; } }
    private string project { get { return ProjectText.Text; } set { ProjectText.Text = value; } }

我想将这 6 个值传递给关注者,

Harvest_TimeSheetEntry entry=new Harvest_TimeSheetEntry(string,string,DateTime,DateTime,int,int);

我应该如何转换这 6 个属性并传递给该函数/构造函数?

【问题讨论】:

  • 您要传递值还是类型?模棱两可
  • 我想传递这 6 个值,但它们的类型应该如构造函数中所示。
  • 为什么你把所有的属性都设为字符串,为什么 starttime,stoptime 不是 datetime 和 task 和 project 为 int
  • 我认为这里的问题很明显。对于那些认为这解释得不好的人,我会说你理解问题的能力应该被否决。

标签: c# wpf parameters type-conversion


【解决方案1】:

不清楚您要求的确切内容,但可能您需要类似以下内容:

var entry = new Harvest_TimeSheetEntry() {
    client = ClientName,  //CLIENT NAME YOU INTEND TO PASS TO CTOR
    starttime = startDateTime.ToString()  //DATE TIME YOU INTEND TO PASS TO CTOR
     .....
}

如果这不是您的要求,请澄清。

编辑

如果您面临的问题是从 UI 上的string 转换为实际数据类型需要构造类型的实例,在这种情况下您可以使用:

DateTime.Parse - 从字符串解析为DateTime 格式

int.TryParse - 解析integer 值。

【讨论】:

  • starttime 被定义为字符串
  • @musefan:为此我调用 ToString() 将其分配给字符串属性
  • 很确定他希望将 6 个字符串属性传递给他定义的方法。因此,“我应该如何转换这 6 个属性并传递给该函数/构造函数?”
  • 我的 TimeSheetEntry() 构造函数在某处定义了这些类型参数。我从文本框中获取值。所以所有这些都是我要转换的字符串值,因此我可以将这些值传递给该构造函数并能够创建新条目。
  • @Dinesh:我更新了我的答案,看看这是不是你想要的。
【解决方案2】:

转换的简单方法是这样做

DateTime dtStartTime = DateTime.Parse(starttime);
DateTime dtStopTime = DateTime.Parse(stoptime);
int intTask = Int32.Parse(task);
int intProject = Int32.Parse(project);

但是,这假定 DateTime 的格式正确,并且 taskproject 是有效整数。您需要添加自己的错误处理,一个很好的方法是查看DateTime.TryParseDateTime.TryParseExact 方法和Int32.TryParse 方法。

例如,

int intTask;
if(Int32.TryParse(task, out intTask))
{
    //parse successful
}
else
   //parse unsuccessful

【讨论】:

  • 对不起。 starttime,stoptime,task,project 都是属性。您不能对属性执行此操作。
【解决方案3】:

如果要将字符串转换为另一种数据类型,则可以使用一些选项,可用的方法还取决于目标类型。 (Worth a read)

在这种情况下我推荐的函数是:DateTime.ParseExactint.Parse

以下是如何使用每个的示例:

int convertedInt = int.Parse(myIntString);

DateTime convertedDateTime = DateTime.ParseExact(myDateString, "dd/MM/yyyy", null);

然后您可以将这些值传递给您的函数。

注意:我假设您的日期格式是 dd/MM/yyyy - others are available

重要的是要知道,如果任何一个字符串不是预期的格式,您就会得到一个异常。建议在调用这些方法之前验证您的输入字段。还值得注意的是,每个都有Try 方法可用:DateTime.TryParseExactint.TryParse,如果格式无效,您可以采取措施。

【讨论】:

  • 这里我的 starttime 和 stoptime 是字符串属性。我想转换这些属性的类型。所以, DateTime.ParseExact 在那里不起作用。
  • @Dinesh:你错了,这可以正常工作。如果您与您将属性定义为private 属于同一类
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 2015-10-13
  • 2017-12-05
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多