Version Used:
16.8.0 Preview 2.0
Steps to Reproduce:
```C#
public class Test
{
public string? M(string? arg)
=> arg?.Substring(42); // IDE0057
}
**Expected Behavior**:
```C#
#nullable enable
public class Test
{
public string? M(string? arg)
=> arg?[42..]; // IDE0057
}
Actual Behavior:
The code fix generates invalid code:
```C#
public class Test
{
public static string? M(string? arg)
=> arg?.Substring[42..]; // IDE0057
}
``
Note that the.Substring` is still there.

Expected Behavior:
I think the Analyzer should not be triggered, as there is no other way to use the range operator.
I think it should be triggered, but produces arg?[42..]
@Youssef1313 's desired behavior is correct. That's what we should be generating.
Most helpful comment
I think it should be triggered, but produces
arg?[42..]