Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
3c801953
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3c801953
编写于
2月 28, 2020
作者:
M
msftbot[bot]
提交者:
GitHub
2月 28, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #42011 from agocke/expression-tree-errors
Prohibit C# 8 index and range usage in expression trees
上级
64dcf6d2
51580ab4
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
320 addition
and
0 deletion
+320
-0
src/Compilers/CSharp/Portable/CSharpResources.resx
src/Compilers/CSharp/Portable/CSharpResources.resx
+9
-0
src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
+4
-0
src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs
...harp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs
+42
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf
src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf
...Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf
+15
-0
src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf
...Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf
+15
-0
src/Compilers/CSharp/Test/Emit/CodeGen/IndexAndRangeTests.cs
src/Compilers/CSharp/Test/Emit/CodeGen/IndexAndRangeTests.cs
+70
-0
未找到文件。
src/Compilers/CSharp/Portable/CSharpResources.resx
浏览文件 @
3c801953
...
...
@@ -6007,4 +6007,13 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
<data
name=
"ERR_ImplicitRangeIndexerWithName"
xml:space=
"preserve"
>
<value>
Invocation of implicit Range Indexer cannot name the argument.
</value>
</data>
<data
name=
"ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer"
xml:space=
"preserve"
>
<value>
An expression tree may not contain a pattern System.Index or System.Range indexer access
</value>
</data>
<data
name=
"ERR_ExpressionTreeContainsFromEndIndexExpression"
xml:space=
"preserve"
>
<value>
An expression tree may not contain a from-end index ('^') expression.
</value>
</data>
<data
name=
"ERR_ExpressionTreeContainsRangeExpression"
xml:space=
"preserve"
>
<value>
An expression tree may not contain a range ('..') expression.
</value>
</data>
</root>
src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
浏览文件 @
3c801953
...
...
@@ -1761,6 +1761,10 @@ internal enum ErrorCode
ERR_ConditionalOnLocalFunction
=
8783
,
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
=
8790
,
ERR_ExpressionTreeContainsFromEndIndexExpression
=
8791
,
ERR_ExpressionTreeContainsRangeExpression
=
8792
,
// Note: you will need to re-generate compiler code after adding warnings (eng\generate-compiler-code.cmd)
}
}
src/Compilers/CSharp/Portable/Lowering/DiagnosticsPass_ExpressionTrees.cs
浏览文件 @
3c801953
...
...
@@ -79,6 +79,48 @@ public override BoundNode VisitArrayCreation(BoundArrayCreation node)
return
base
.
VisitArrayCreation
(
node
);
}
public
override
BoundNode
VisitArrayAccess
(
BoundArrayAccess
node
)
{
if
(
_inExpressionLambda
&&
node
.
Indices
.
Length
==
1
&&
node
.
Indices
[
0
].
Type
!.
SpecialType
==
SpecialType
.
None
)
{
Error
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
node
);
}
return
base
.
VisitArrayAccess
(
node
);
}
public
override
BoundNode
VisitIndexOrRangePatternIndexerAccess
(
BoundIndexOrRangePatternIndexerAccess
node
)
{
if
(
_inExpressionLambda
)
{
Error
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
node
);
}
return
base
.
VisitIndexOrRangePatternIndexerAccess
(
node
);
}
public
override
BoundNode
VisitFromEndIndexExpression
(
BoundFromEndIndexExpression
node
)
{
if
(
_inExpressionLambda
)
{
Error
(
ErrorCode
.
ERR_ExpressionTreeContainsFromEndIndexExpression
,
node
);
}
return
base
.
VisitFromEndIndexExpression
(
node
);
}
public
override
BoundNode
VisitRangeExpression
(
BoundRangeExpression
node
)
{
if
(
_inExpressionLambda
)
{
Error
(
ErrorCode
.
ERR_ExpressionTreeContainsRangeExpression
,
node
);
}
return
base
.
VisitRangeExpression
(
node
);
}
public
override
BoundNode
VisitSizeOfOperator
(
BoundSizeOfOperator
node
)
{
if
(
_inExpressionLambda
&&
node
.
ConstantValue
==
null
)
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Strom výrazu nemůže obsahovat hodnotu struktury REF ani zakázaný typ {0}.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Strom výrazů nesmí obsahovat výraz switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Eine Ausdrucksstruktur darf keinen Wert vom Typ "ref struct" oder vom eingeschränkten Typ "{0}" enthalten.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Eine Ausdrucksstruktur darf keinen switch-Ausdruck enthalten.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Un árbol de expresión no puede contener un valor de estructura ref ni el tipo restringido “{0}”.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Un árbol de expresión no puede contener una expresión switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Une arborescence de l'expression ne peut pas contenir de valeur de struct par référence ou de type restreint '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Une arborescence de l'expression ne peut pas contenir d'expression switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">L'albero delle espressioni non può contenere il valore '{0}' per lo struct ref o il tipo limitato.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Un albero delle espressioni non può contenere un'espressione switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">式ツリーに ref 構造体または制限がある型 '{0}' の値を含めることはできません。</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">式ツリーに switch 式を含めることはできません。</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">식 트리에는 ref struct 값 또는 제한된 형식 '{0}'을(를) 사용할 수 없습니다.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">식 트리에는 switch 식이 포함될 수 없습니다.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Drzewo wyrażeń nie może zawierać wartości elementu ref struct ani typu ograniczonego „{0}”.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Drzewo wyrażeń nie może zawierać wyrażenia switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">A árvore de expressão não pode conter um valor de struct de referência ou o tipo restrito '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Uma árvore de expressão não pode conter uma expressão switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">Дерево выражений не может содержать значение ref struct или ограниченный тип "{0}".</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">Дерево выражений не может содержать выражение switch.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">İfade ağacı, ref yapısında veya kısıtlanmış '{0}' türünde değer içeremez.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">İfade ağacı, switch ifadesi içeremez.</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target
state=
"translated"
>
表达式树不能包含 ref 结构或受限类型“{0}”的值。
</target>
<note
/>
</trans-unit>
<trans-unit
id=
"ERR_ExpressionTreeContainsFromEndIndexExpression"
>
<source>
An expression tree may not contain a from-end index ('^') expression.
</source>
<target
state=
"new"
>
An expression tree may not contain a from-end index ('^') expression.
</target>
<note
/>
</trans-unit>
<trans-unit
id=
"ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer"
>
<source>
An expression tree may not contain a pattern System.Index or System.Range indexer access
</source>
<target
state=
"new"
>
An expression tree may not contain a pattern System.Index or System.Range indexer access
</target>
<note
/>
</trans-unit>
<trans-unit
id=
"ERR_ExpressionTreeContainsRangeExpression"
>
<source>
An expression tree may not contain a range ('..') expression.
</source>
<target
state=
"new"
>
An expression tree may not contain a range ('..') expression.
</target>
<note
/>
</trans-unit>
<trans-unit
id=
"ERR_ExpressionTreeContainsSwitchExpression"
>
<source>
An expression tree may not contain a switch expression.
</source>
<target
state=
"translated"
>
表达式树不能包含 switch 表达式。
</target>
...
...
src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf
浏览文件 @
3c801953
...
...
@@ -177,6 +177,21 @@
<target state="translated">運算式樹狀架構不可包含 ref 結構或限制型別 '{0}' 的值。</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsFromEndIndexExpression">
<source>An expression tree may not contain a from-end index ('^') expression.</source>
<target state="new">An expression tree may not contain a from-end index ('^') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer">
<source>An expression tree may not contain a pattern System.Index or System.Range indexer access</source>
<target state="new">An expression tree may not contain a pattern System.Index or System.Range indexer access</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsRangeExpression">
<source>An expression tree may not contain a range ('..') expression.</source>
<target state="new">An expression tree may not contain a range ('..') expression.</target>
<note />
</trans-unit>
<trans-unit id="ERR_ExpressionTreeContainsSwitchExpression">
<source>An expression tree may not contain a switch expression.</source>
<target state="translated">運算式樹狀結構不可包含 switch 運算式。</target>
...
...
src/Compilers/CSharp/Test/Emit/CodeGen/IndexAndRangeTests.cs
浏览文件 @
3c801953
...
...
@@ -40,6 +40,76 @@ private static void VerifyIndexCall(IMethodSymbol symbol, string methodName, str
Assert
.
Equal
(
containingTypeName
,
symbol
.
ContainingType
.
Name
);
}
[
Fact
]
public
void
ExpressionTreePatternIndexAndRange
()
{
var
src
=
@"
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
struct S
{
public int Length => 0;
public S Slice(int start, int length) => default;
}
class Program
{
static void Main()
{
Expression<Func<int[], int>> e = (int[] a) => a[new Index(0, true)]; // 1
Expression<Func<List<int>, int>> e2 = (List<int> a) => a[new Index(0, true)]; // 2
Expression<Func<int[], int[]>> e3 = (int[] a) => a[new Range(0, 1)]; // 3
Expression<Func<S, S>> e4 = (S s) => s[new Range(0, 1)]; // 4
}
}"
;
var
comp
=
CreateCompilationWithIndexAndRange
(
new
[]
{
src
,
TestSources
.
GetSubArray
,
});
comp
.
VerifyEmitDiagnostics
(
// (16,55): error CS8790: An expression tree may not contain a pattern System.Index or System.Range indexer access
// Expression<Func<int[], int>> e = (int[] a) => a[new Index(0, true)]; // 1
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
"a[new Index(0, true)]"
).
WithLocation
(
16
,
55
),
// (17,64): error CS8790: An expression tree may not contain a pattern System.Index or System.Range indexer access
// Expression<Func<List<int>, int>> e2 = (List<int> a) => a[new Index(0, true)]; // 2
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
"a[new Index(0, true)]"
).
WithLocation
(
17
,
64
),
// (19,58): error CS8790: An expression tree may not contain a pattern System.Index or System.Range indexer access
// Expression<Func<int[], int[]>> e3 = (int[] a) => a[new Range(0, 1)]; // 3
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
"a[new Range(0, 1)]"
).
WithLocation
(
19
,
58
),
// (20,46): error CS8790: An expression tree may not contain a pattern System.Index or System.Range indexer access
// Expression<Func<S, S>> e4 = (S s) => s[new Range(0, 1)]; // 4
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsPatternIndexOrRangeIndexer
,
"s[new Range(0, 1)]"
).
WithLocation
(
20
,
46
)
);
}
[
Fact
]
public
void
ExpressionTreeFromEndIndexAndRange
()
{
var
src
=
@"
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Expression<Func<Index>> e = () => ^1;
Expression<Func<Range>> e2 = () => 1..2;
}
}"
;
var
comp
=
CreateCompilationWithIndexAndRange
(
src
);
comp
.
VerifyEmitDiagnostics
(
// (10,43): error CS8791: An expression tree may not contain a from-end index ('^') expression.
// Expression<Func<Index>> e = () => ^1;
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsFromEndIndexExpression
,
"^1"
).
WithLocation
(
10
,
43
),
// (11,44): error CS8792: An expression tree may not contain a range ('..') expression.
// Expression<Func<Range>> e2 = () => 1..2;
Diagnostic
(
ErrorCode
.
ERR_ExpressionTreeContainsRangeExpression
,
"1..2"
).
WithLocation
(
11
,
44
)
);
}
[
Fact
]
public
void
PatternIndexArray
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录