Comments (4)
Note that you would get the same error with in
parameter (so this issue is orthogonal to the ref readonly feature):
class C
{
void M0(in int i) { }
void M1(in int i)
{
M0(ref i); // error CS8329: Cannot use variable 'i' as a ref or out value because it is a readonly variable
}
}
ref
modifier simply cannot be used with readonly references. But I agree the diagnostic message could be clearer.
from roslyn.
I am still interested to know why the design requires writability for a ref readonly argument passed using ref
keyword.
The reason I found this design so confusing is that it is inconsistent with all the existing places that I can create ref readonly
s, including assignment to ref readonly
locals and return values.
int i = 1;
ref readonly int ri = ref i; // ok
ri = ref i; // reassignment also ok
M(ref i); // ok?
M(ref ri); // error!
ref readonly int M(ref readonly int i) => ref i; // ok
So, when you get started using this feature, and ref
keyword works for some arguments, it leads user to think: ok, I'm supposed to use ref
for these arguments, like all the other places that use ref readonlys in the language. Until they get around to actually passing a readonly reference by-ref, in which case an error occurs.
If we really have a strong reason for requiring writability here and not in the other places, then OK. Let's resolve by simply issuing a diagnostic which is consistent with all the other places that a wrong argument ref kind is being used: error CS1620: Argument 1 must be passed with the 'in' keyword
.
from roslyn.
I am still interested to know why the design requires writability for a ref readonly argument passed using
ref
keyword.
The reasons are explained in the proposal under alternatives:
from roslyn.
Thanks Jan!
from roslyn.
Related Issues (20)
- NewlyCreatedProjectsFromDotNetNew.ValidateCSharpTemplateProjects is flakey HOT 2
- [Automated] PRs inserted in VS build main-35025.37
- Typing a quote character after `new` inserts two quotes. HOT 2
- .NET 9 `Preview.5`, `Preview.6`, `Preview.7` C# compiler crashes on LINQ expression with string interpolation HOT 7
- [Source Generators] ISyntaxReceiver instances should be able to access AdditionalFiles HOT 1
- Changing warning CS8002 to an error still results in binary being outputted despite error HOT 1
- [Automated] PRs inserted in VS build feature.debugger.main-35026.134
- [Automated] PRs inserted in VS build feature.dotnetVS-35026.97
- Suggestion to Include Criteria for Identifying Generated Code in AnalysisContext.ConfigureGeneratedCodeAnalysis() Documentation
- Precompile compile-time declared Lambda Expression. HOT 2
- Code Analysis rule CA1860 gives a biased message
- CodeGen for defaulted collection expression elements (Span via InlineArray) HOT 4
- CS7038: Failed to emit module if new collection syntax is used with an implicit ImmutableArray operator.
- IEventSymbol.DeclaringSyntaxReferences Syntax is VariableDeclaratorSyntax not EventDeclarationSyntax HOT 2
- Create LangVersion 13 HOT 3
- [Automated] PRs inserted in VS build feature.debugger.main-35027.161
- [Automated] PRs inserted in VS build main-35027.32
- Roslyn wrote incorrect timedatestime to PE Coff Header of a .Net 8.0 program file HOT 1
- IDE0304 should preserve the leading comment
- Support limiting CS1591 to certain members
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from roslyn.