【问题标题】:Dictionary as private field in Script# class字典作为 Script# 类中的私有字段
【发布时间】:2013-11-19 17:49:34
【问题描述】:

我在脚本# 0.7.5 中有以下类:

[ScriptNamespace("Scripts")]
public class MyClass 
{
    private Dictionary<string, string> stageMapping = new Dictionary<string, string>();

    public PortfolioOptimisationOverlord()
    {
        stageMapping["first"] = "http://www.me.com/mike";
        stageMapping["second"] = "http://www.me.com/terry";
        stageMapping["third"] = "http://www.me.com/billy";
        stageMapping["fourth"] = "http://www.me.com/bobby";
        stageMapping["fifth"] = "http://www.me.com/richard";
    }
}

不幸的是,在编译时它不会生成原型类,因此无法说它无法访问this

如果我创建一个 int 类型的私有字段,它似乎可以工作,但不适用于字典或列表。

--编辑--
这里有更多信息: 由此产生的javascript是:

////////////////////////////////////////////////////////////////////////////////
// Scripts.PortfolioOptimisationOverlord

Scripts.PortfolioOptimisationOverlord = function Scripts_PortfolioOptimisationOverlord() {
    /// <field name="_stageMapping" type="Object">
    /// </field>
    this._stageMapping = {};
    this._stageMapping['first'] = 'http://www.me.com/mike';
    this._stageMapping['second'] = 'http://www.me.com/terry';
    this._stageMapping['third'] = 'http://www.me.com/billy';
    this._stageMapping['fourth'] = 'http://www.me.com/bobby';
    this._stageMapping['fifth'] = 'http://www.me.com/richard';
}

如果我添加一个名为 intFieldint 私有字段:

 ////////////////////////////////////////////////////////////////////////////////
// Scripts.PortfolioOptimisationOverlord

Scripts.PortfolioOptimisationOverlord = function Scripts_PortfolioOptimisationOverlord() {
    /// <field name="_stageMapping" type="Object">
    /// </field>
    /// <field name="_intField" type="Number" integer="true">
    /// </field>
    this._stageMapping = {};
    this._stageMapping['first'] = 'http://www.me.com/mike';
    this._stageMapping['second'] = 'http://www.me.com/terry';
    this._stageMapping['third'] = 'http://www.me.com/billy';
    this._stageMapping['fourth'] = 'http://www.me.com/bobby';
    this._stageMapping['fifth'] = 'http://www.me.com/richard';
}
Scripts.PortfolioOptimisationOverlord.prototype = {
    _intField: 0
}

如您所见,唯一的变化是添加了一个以 .prototype 结尾的类型。

构建失败。

【问题讨论】:

  • 这看起来不像 javascript
  • 你能再贴一些代码吗?生成的 Javascript 是什么样的。它在哪里失败说它无法访问这个?只是当您尝试创建此类的实例时?
  • 顺便说一句,S# 不生产原型。我认为在 0.7.5 中它产生的模块模式就像 0.8 一样(它也产生 AMD 模式)。
  • 另外,您可能想尝试 0.8。这是一个入门文档:github.com/theoutlander/scriptsharp/wiki/…
  • 嗨尼克,感谢您的反馈,我已经澄清了上面的问题。我们不能移动到 0.8,因为我们被限制在 XP 或 Server 2013 中工作,它们不能运行 VS 2012,这是一个先决条件。我们的公司网络不支持任何其他操作系统,也没有办法绕过它(相信我,我已经尝试过!)所以我们必须等到发布才能移动。

标签: c# script#


【解决方案1】:

似乎 0.8 是答案。感谢所有提供帮助的人。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2014-06-19
    • 1970-01-01
    • 2021-08-27
    • 2014-04-29
    • 2011-08-22
    • 2013-01-28
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多