Giter Site home page Giter Site logo

Comments (4)

jjonescz avatar jjonescz commented on July 1, 2024

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.

RikkiGibson avatar RikkiGibson commented on July 1, 2024

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 readonlys, 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.

jjonescz avatar jjonescz commented on July 1, 2024

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:

image

from roslyn.

RikkiGibson avatar RikkiGibson commented on July 1, 2024

Thanks Jan!

from roslyn.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.