0

我需要将 <string,string> 映射的字符串表示形式传递到我的 U-SQL 程序中,并将其反序列化为 C# Dictionary<string,string>,以便我可以将其转换为 U-SQL SqlMap。我需要以一种恒定可折叠的方式来完成它。我最近的尝试:

DECLARE @MapStr string = "{\"key\": \"val\"}";
DECLARE CONST @map = new SqlMap<string,string>(JsonConvert.DeserializeObject<Dictionary<string, string>>(@MapStr));

因“E_CSC_USER_EXPRESSIONNOTCONSTANTFOLDABLE:表达式不能被常量折叠”而失败。

我已经找到了许多将字符串反序列化为映射的方法,但到目前为止还没有一种方法是恒定可折叠的。我找不到常量可折叠 c# 表达式的列表,这在这里也很有帮助。

4

2 回答 2

0

文档

...可以在编译时计算(所谓的常量可折叠表达式)

在 C# 中,常量定义为

在编译时已知并且在程序的生命周期内不会改变的不可变值。常量使用 const 修饰符声明。只有 C#内置类型(不包括 System.Object)可以声明为 const。用户定义的类型,包括类、结构和数组,不能是 const。

因此,您似乎只能使用可以在 C# 中定义为常量的内容,因此您仅限于内置类型的表达式(不包括System.Object)。

于 2020-06-29T21:21:13.343 回答
0

万一其他人好奇,我相信这是不可能的:

  • 只有字符串和内置类型表达式是常量可折叠的,不包括对象(例如数组和映射)。(有关此链接,请参见其他答案)
  • 没有计算结果为 SqlMap 的内置表达式或字符串表达式
  • 因此,没有可计算为 SqlMap 的常量可折叠表达式

出于我的特定目的,我能够使用创建 CONST SqlMaps 的配置文件并使用它,但如果我们有超过一组有限的可能输入,那将是不可能的。

于 2020-07-08T17:37:07.877 回答