我有一个静态变量 -
static readonly String tableName;
我试着像这样设置
static readonly String tableName = Dts.Variables["ssisString"].Value.ToString();
我收到错误:
An object reference is required for the non-static field, method, or property.
但是,它的工作原理如下:
static String tableName = "";
main()
{
tableName = Dts.Variables["ssisString"].Value.ToString();
}
为什么?
答案 0 :(得分:1)
这不是静态部分,而是readonly
正在哄骗你。
static readonly String tableName;
static ScriptMain()
{
// An object reference is required for the non-static field, method, or property 'Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase.Dts.get'
tableName = Dts.Variables["ssisString"].Value.ToString();
}
public void Main()
{
// this works
string local = Dts.Variables["ssisString"].Value.ToString();
// a static read only field cannot be assinged to (except in a static constructor or a variable initializer)
tableName = Dts.Variables["ssisString"].Value.ToString();
Dts.TaskResult = (int)ScriptResults.Success;
}
我记得很清楚的静态信息是,该类的所有实例都有一个变量实例。因为只有一个ScriptMain实例,你从静态到实例变量得到了什么?
无论如何,tableName
的一个实例,你想为它分配一个值。问题是,具有您想要使用的值的东西必须被实例化以提供该值。当您在Main
方法内部分配时,这不是问题。
是一个问题,因为readonly属性只允许你在静态构造函数或变量初始化程序中赋值......这在我脑海中回到了需要实例的问题
一些.net的人,随意使用相应的术语来解决这个问题或改进这个答案。
参考
答案 1 :(得分:0)