是否可以在不使用setter的情况下在属性中设置值?

时间:2019-01-23 06:01:27

标签: c# .net asp.net-core-2.0 mailchimp mandrill

我正在使用此程序包(https://github.com/shawnmclean/Mandrill-dotnet)在.net应用程序中实现山rill。现在有一个用于发送电子邮件的模型“ EmailMessage”。 EmailMessage模型内部有一个属性“ GlobalMergeVars”:

   [JsonProperty("global_merge_vars")]
   public List<MergeVar> GlobalMergeVars { get; }

现在我们可以看到GlobalMergeVars没有设置器,但是我必须为此设置一个值。如果我们转到此链接(https://mandrillapp.com/api/docs/messages.html)并单击“尝试”按钮,则可以为GlobalMergeVars设置值,但是我认为我正在使用的程序包中存在一些问题。但是我不能切换到其他软件包,因为与其他软件包相比,它非常灵活。那么,是否有必要为GlobalMergeVars设置价值?

PS:我还在github存储库上打开了一个问题。但是由于截止日期临近,我需要快速解决问题。

2 个答案:

答案 0 :(得分:4)

我想我已经找到了您正在谈论的课程here。尽管EmailMessage的属性与问题中显示的不同:

public class EmailMessage
{
    #region Public Properties
    ...
    /// <summary>
    ///   Gets the global_merge_vars.
    /// </summary>
    public List<MergeVar> GlobalMergeVars { get; private set; }

(这里的代码与问题中给出的代码之间的差异并不重要-我只是想知道我是否在查看正确的文件!)

缺少的set等同于private set。该类中包含以下方法,该方法可让您设置变量:

public void AddGlobalVariable(string name, dynamic content)
{
  if (GlobalMergeVars == null)
  {
    GlobalMergeVars = new List<MergeVar>();
  }

  var mv = new MergeVar {Name = name, Content = content};
  GlobalMergeVars.Add(mv);
}

答案 1 :(得分:0)

很抱歉成为坏消息的承担者,但是如果没有公共设置者,您将不能直接从课堂之外设置值。其他选项将通过构造函数或允许这样做的方法。但这似乎不存在任何可用的选项。

在旁注中,只需检查该属性是否可能没有可以整体设置的父属性。例如在C#中使用字体时,例如设置标签的字体。 Font对象的某些属性是“只读”的,不能在外部设置。但是可以设置Font对象本身。因此,在这种情况下,您必须在本地创建一个新的Font对象并设置所需的道具,然后将其分配/设置为新Font。

希望您能及时找到解决方法。

更新:

Rufo先生刚刚给您提供了解决方案:

  

答案是:在阅读   github.com/shawnmclean/Mandrill-dotnet/blob/master/src/Mandrill / ...   从第376行开始。该方法是针对您的情况设计的