Reporter | Ilya Ryzhenkov (orangy) |
---|---|
Created | Dec 13, 2011 3:25:02 AM |
Updated | Oct 9, 2018 4:13:52 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
↧
RSRP-286611: [VB] QF for error of missing Overrides for MustInherit suggests creating "Overloads"
↧
RSRP-336704: VB: QF "change type of function" does nothing if function type is defined using type character
Reporter | Anton Lobov (Anton.Lobov) |
---|---|
Created | Dec 19, 2012 9:12:08 AM |
Updated | Oct 9, 2018 4:15:42 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Bug |
Fix version | Backlog |
Affected versions | 7.1, 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
Example code:
Function Func!(Param&)
Func! = "a"c
End Function
↧
↧
RSRP-336766: "Convert LINQ to code" should not push the code out of lambda expression
Reporter | Anton Lobov (Anton.Lobov) |
---|---|
Created | Dec 20, 2012 5:36:13 PM |
Updated | Oct 9, 2018 4:18:24 PM |
Subsystem | Context Actions |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Major |
State | Submitted |
Type | Bug |
Fix version | Backlog |
Affected versions | 8.0, 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
public void Test()
{
List<Customer> sfsfsfsfsf = new List<Customer>();
var cc = (sfsfsfsfsf.Select(ca => new {ca, ca1 = ca})
.GroupBy(@t => @t.ca.Country, @t => @t.ca1)).Select(lalalal =>
new {Country = lalalal.Key, CustCount71 = lalalal.Count()});
var cc1 = cc.First().CustCount71;
var cc2 = cc.Last().Country;
}
public class Customer
{
private string name;
List<string> phoneNumbers = new List<string>();
public string Country { get { return name; } set { name = value; } }
public List<string> PhoneNumbers { get { return phoneNumbers; } }
public int Count { get; set; }
}
Apply "Convert LINQ to code" QF on lalalal.Count().
It will transform to erroneous code moving expression out of the lambda where variable is defined:
foreach (Customer customer in lalalal)
count++;
var cc = (sfsfsfsfsf.Select(ca => new {ca, ca1 = ca})
.GroupBy(@t => @t.ca.Country, @t => @t.ca1)).Select(lalalal =>
new {Country = lalalal.Key, CustCount71 = count});
Instead, it should have converted this as follows:
var cc = (sfsfsfsfsf.Select(ca => new {ca, ca1 = ca})
.GroupBy(@t => @t.ca.Country, @t => @t.ca1)).Select(lalalal =>
{
foreach (Customer customer in lalalal)
count++;
return new
{
Country = lalalal.Key,
CustCount71 = count
};
});
↧
RSRP-336895: There is no quickfix to apply name changes if a variable with the correct name already exists or it is a keyword name
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Dec 26, 2012 3:28:50 PM |
Updated | Oct 9, 2018 4:21:58 PM |
Resolved | Oct 9, 2018 4:21:58 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Critical |
State | Fixed |
Type | Feature |
Fix version | Unidentified prior version |
Affected versions | 2016.2 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
Add the following code to cs file
R# marks _selectSomeThing with warning 'Inconsistent Naming', but when I click Alt+Enter -> there is no quickfix to apply name changes.
public int SelectSomeThing;
protected int _selectSomeThing = 30;
R# marks _selectSomeThing with warning 'Inconsistent Naming', but when I click Alt+Enter -> there is no quickfix to apply name changes.
↧
RSRP-337264: A feature to allow me to ignore Addition of certain namespaces
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Jan 14, 2013 1:28:33 PM |
Updated | Oct 9, 2018 4:39:15 PM |
Resolved | Oct 9, 2018 4:39:15 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Duplicate |
Type | Feature |
Fix version | Backlog |
Affected versions | No Affected versions |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
This is causing me problems. For some namespaces I don't want automatic adding.
I have a namespace called D
D.WebData2 data = new D.WebData2();
Trying to write the sentence obove is impossible using my current settings (default) for resharper. I always adds D automatically, and removes the D from the "new D.WebData2();"
I would classify this as a bug.
A great feature would be to allow me to ignore Addition of certain namespaces.
I have a namespace called D
D.WebData2 data = new D.WebData2();
Trying to write the sentence obove is impossible using my current settings (default) for resharper. I always adds D automatically, and removes the D from the "new D.WebData2();"
I would classify this as a bug.
A great feature would be to allow me to ignore Addition of certain namespaces.
↧
↧
RSRP-395769: Imports namespaces optimization - prevent adding some namespaces
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Nov 25, 2013 5:24:13 PM |
Updated | Oct 9, 2018 4:39:15 PM |
Subsystem | Quick Fixes |
Assignee | Alexander Shvedov (shvedov) |
Priority | Normal |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 2018.1.1 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
We're using a component called evopdf (http://www.evopdf.com/)
The component does it's job, BUT as soon as I start typing something, resharper suggests that I should use something found in "evointernal", and adds a using to it...
For instance, I wish to write something like "string name = SelectedItem.Name;"
I get to "string name = s" when resharper suggests using evointernal.s and adds a using to it...
I've seen that there are options to add namespaces that should never be removed from usings, as well as adding namespaces that should always be imported...
It would be really good if that was an option add namespaces that should never be imported :-)
Or at least not suggested unless added manually...
The component does it's job, BUT as soon as I start typing something, resharper suggests that I should use something found in "evointernal", and adds a using to it...
For instance, I wish to write something like "string name = SelectedItem.Name;"
I get to "string name = s" when resharper suggests using evointernal.s and adds a using to it...
I've seen that there are options to add namespaces that should never be removed from usings, as well as adding namespaces that should always be imported...
It would be really good if that was an option add namespaces that should never be imported :-)
Or at least not suggested unless added manually...
Here's a very small sample :-)
I included the evo-component, that's why the size of the zip is so big...
Right now, the project will not compile...
I've performed the following step in the project
1. Added a reference to evohtmltopdf
2. Added evointernal.dll to the bin-folder (this is required since it's not possible to add a reference to it)
3. Removed un-used usings in program.cs
4. In Main, I started to write "string s = d"
As soon as I typed the d, resharper suggests that a using for evointernal should be added...
If i press enter, the using is added.. as it should I suppose, but this is really annoying since it's an easy mistake to make sometimes...
The d does not have to be a d... it's the same with almost all letters..
I included the evo-component, that's why the size of the zip is so big...
Right now, the project will not compile...
I've performed the following step in the project
1. Added a reference to evohtmltopdf
2. Added evointernal.dll to the bin-folder (this is required since it's not possible to add a reference to it)
3. Removed un-used usings in program.cs
4. In Main, I started to write "string s = d"
As soon as I typed the d, resharper suggests that a using for evointernal should be added...
If i press enter, the using is added.. as it should I suppose, but this is really annoying since it's an easy mistake to make sometimes...
The d does not have to be a d... it's the same with almost all letters..
↧
RSRP-337492: Case-insensitive search of the project references for class names
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Jan 22, 2013 2:22:42 PM |
Updated | Oct 9, 2018 4:55:50 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
ReSharper should do case-insensitive search of the project references for class names when I enter a name that is not recognized based on the existing usings in the c# file.
For example,
I have a c# file with no 'using' for 'System.Text'
When I enter 'stringbuilder' (as part of StringBuilder x = new StringBuilder) ReSharper does not suggest to add the using for 'System.Text'.
However, if I enter 'StringBuilder' (spelled correctly) it does recognize it and does suggest the inclusion of the 'using'.
Once the using is added, ReSharper does recognize 'stringbuilder' and does show the option of 'StringBuilder' in the auto-complete list.
I also think that ReSharper should maintain a list of libraries to search (case-insensitive) for class names and when found it should offer to update the project references AND to add the appropriate using.
For example,
I have a c# file with no 'using' for 'System.Text'
When I enter 'stringbuilder' (as part of StringBuilder x = new StringBuilder) ReSharper does not suggest to add the using for 'System.Text'.
However, if I enter 'StringBuilder' (spelled correctly) it does recognize it and does suggest the inclusion of the 'using'.
Once the using is added, ReSharper does recognize 'stringbuilder' and does show the option of 'StringBuilder' in the auto-complete list.
I also think that ReSharper should maintain a list of libraries to search (case-insensitive) for class names and when found it should offer to update the project references AND to add the appropriate using.
↧
RSRP-337493: Collapse the region when the cursor is on the #endregion, as I can when I'm at the #region class
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Jan 22, 2013 4:07:40 PM |
Updated | Oct 9, 2018 5:04:43 PM |
Resolved | Oct 9, 2018 5:04:43 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Obsolete |
Type | Feature |
Fix version | Backlog |
Affected versions | 7.1.1 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
The folding of code should be supported at the end of the range as well as at the front.
For example:
I would like to be able to collapse the region when my cursor is on the #endregion (as I can when I'm at the #region class).
The point is that the region may be large and to scroll back to find the start in order to collapse it can be tedious.
At least with closing brace '}', I cant use the ctrl-] to jump to the start and then its fairly easy to fold.
Never the less, it would be nice to be able to fold up whenever I'm on the line at the end of a folding region.
I would suggest, as an up-folding icon, something like the '+' with an added up-arrow to make it clear that its folding upwards.
For example:
- region ...description...
- endregion
I would like to be able to collapse the region when my cursor is on the #endregion (as I can when I'm at the #region class).
The point is that the region may be large and to scroll back to find the start in order to collapse it can be tedious.
At least with closing brace '}', I cant use the ctrl-] to jump to the start and then its fairly easy to fold.
Never the less, it would be nice to be able to fold up whenever I'm on the line at the end of a folding region.
I would suggest, as an up-folding icon, something like the '+' with an added up-arrow to make it clear that its folding upwards.
↧
RSRP-466728: ReSharper throws a error message on loading SQL Server Reporting Services project (.rptproj)
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Oct 20, 2017 3:40:29 PM |
Updated | Oct 9, 2018 5:05:31 PM |
Resolved | Oct 9, 2018 5:05:31 PM |
Subsystem | Platform - Project Model |
Assignee | Evgeniy Stepanov (Evgeniy_Stepanov) |
Priority | Critical |
State | Obsolete |
Type | Bug |
Fix version | 2017.3 |
Affected versions | 2017.2.2 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
Deferred projects load failure
↧
↧
RSRP-337562: Incorrect "Expression is always null" inspection
Reporter | Michael (mteper) |
---|---|
Created | Jan 24, 2013 1:26:30 AM |
Updated | Oct 9, 2018 5:07:51 PM |
Resolved | Oct 9, 2018 5:07:51 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Obsolete |
Type | Unspecified |
Fix version | Backlog |
Affected versions | No Affected versions |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
I have the following extension method and associated unit test:
In the unit test, the variable "source" on the last line is underlined with a blue squiggly, with tooltip displaying "Expression is always null". In fact, the expression is not null and yields the exception, just as the unit test suggests.
public static double StandardDeviation(this IEnumerable<double> values)
{
if (values == null) throw new ArgumentNullException("values");
// operation requires two passes, so we convert source to an array
var array = values.ToArray();
var avg = array.Average();
return Math.Sqrt(array.Average(v => Math.Pow(v - avg, 2)));
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void WhenListIsNull_ThenStandardDeviationThrowsException()
{
var source = (double[]) null;
source.StandardDeviation();
}
In the unit test, the variable "source" on the last line is underlined with a blue squiggly, with tooltip displaying "Expression is always null". In fact, the expression is not null and yields the exception, just as the unit test suggests.
↧
RSRP-337629: Suggest to apply Move Refactoring for drag&drop moving code
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Jan 24, 2013 5:23:25 PM |
Updated | Oct 9, 2018 5:11:34 PM |
Subsystem | Smart copy-paste |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 7.1.1, 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
It is really simple. Here are two classes:
Bar.cs
I want to move the Foo2 method from Foo to Bar.
screenshot1.png
There are two ways to do it.
(1) Select Foo2 and drag-drop it over to Bar.cs
After the drag-drop, the invocation of Foo2 in Foo1 shows up as an error
screenshot2.png
(2) Use cut-paste. Cut it out of class Foo and drop it onto class ‘Bar’. When I do this, ReSharper prompts me to do refactoring.
screenshot3.png
The recommendation is for ReSharper to treat both ways the same.
In the first way (using drag-drop), I have to manually fix up all the references.
In the second way (cut & paste) ReSharper was smart enough to offer to do the ‘move refactoring’.
My suggestion is to offer the ‘move refactoring’ when I drag-drop code from one source module to another.
Foo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FooBar
{
public class Foo
{
public static void Foo1()
{
Foo2();
}
public static void Foo2()
{
throw new NotImplementedException();
}
}
}
Bar.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FooBar
{
public class Bar
{
}
}
I want to move the Foo2 method from Foo to Bar.
screenshot1.png
There are two ways to do it.
(1) Select Foo2 and drag-drop it over to Bar.cs
After the drag-drop, the invocation of Foo2 in Foo1 shows up as an error
screenshot2.png
(2) Use cut-paste. Cut it out of class Foo and drop it onto class ‘Bar’. When I do this, ReSharper prompts me to do refactoring.
screenshot3.png
The recommendation is for ReSharper to treat both ways the same.
In the first way (using drag-drop), I have to manually fix up all the references.
In the second way (cut & paste) ReSharper was smart enough to offer to do the ‘move refactoring’.
My suggestion is to offer the ‘move refactoring’ when I drag-drop code from one source module to another.
↧
RSRP-10827: Live templates: when in template mode override Home and End to go to start/end of the field
Reporter | Valentin Kipiatkov (valentin) |
---|---|
Created | Aug 5, 2006 5:08:55 PM |
Updated | Oct 9, 2018 5:15:28 PM |
Resolved | Oct 9, 2018 5:15:24 PM |
Subsystem | Live Templates |
Assignee | Slava Tutushkin (slava.tutushkin) |
Priority | Major |
State | Fixed |
Type | Feature |
Fix version | Unidentified prior version |
Affected versions | No Affected versions |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
↧
RSRP-337803: Huge suggestion ranges in SSR-based LINQ suggestion
Reporter | Alexander Shvedov (shvedov) |
---|---|
Created | Jan 29, 2013 5:47:01 PM |
Updated | Oct 9, 2018 5:16:11 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Open |
Type | Usability Problem |
Fix version | Backlog |
Affected versions | 7.1.1, 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
xs.Where(x =>
/****************************
* *
* 100 lines of code here *
* *
****************************/
).FirstOrDefault();
All this code is highlighted with "Convert to .FirstOrDefault(with predicate)" suggestion.
All. 100 lines. Should we do smth with this?
↧
↧
RSRP-329028: The ability of a template calling another template
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Aug 7, 2012 3:50:48 PM |
Updated | Oct 9, 2018 5:16:42 PM |
Subsystem | Live Templates |
Assignee | Slava Tutushkin (slava.tutushkin) |
Priority | Major |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 7.0 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
The ability of a template calling another template. This would be great for code generation.
↧
RSRP-309013: Property template in interfaces
Reporter | Marius (geimas5) |
---|---|
Created | Jun 7, 2012 10:35:39 PM |
Updated | Oct 9, 2018 5:17:42 PM |
Subsystem | Live Templates |
Assignee | Slava Tutushkin (slava.tutushkin) |
Priority | Normal |
State | Submitted |
Type | Bug |
Fix version | Backlog |
Affected versions | 7.0 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
When using the properties template "prop" tab, tab. ou always get the regular public type {get;set;} but this is incorrect when used in interfaces. And you have to delete the "public" to get valid code.
↧
RSRP-337931: Create MustOverride Sub (R# 7.1)
Reporter | Denis Abramov (sparky2708) |
---|---|
Created | Jan 30, 2013 10:57:14 PM |
Updated | Oct 9, 2018 5:20:32 PM |
Subsystem | Quick Fixes - Create From Usage |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Usability Problem |
Fix version | Backlog |
Affected versions | 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
I am using VB.NET with R#7.1. So I wanted R# to create the method "Load" for me. Look at the options it is presenting me in the screenshot attached. As a "VB.NET" developer I am looking for "Create MustOverride Sub" which isn't part of the list. Interestingly there is "Create MustOverride Property" and "Create MustOverride ReadOnly Property". After looking at the list I do see "Create abstract class". This should really say "Create MustOverride Sub" for VB.NET developers, VB.NET developers aren't generally thinking of the word "abstract" unless you have a C#/Java background.
JetBrains ReSharper 7.1.1 Full Edition
Build 7.1.1000.900 on 2012-12-13T20:22:48
JetBrains ReSharper 7.1.1 Full Edition
Build 7.1.1000.900 on 2012-12-13T20:22:48
↧
RSRP-337986: Add a default property initialization to constructor
Reporter | Bojan Vrhovnik (bojanv) |
---|---|
Created | Feb 1, 2013 4:33:45 PM |
Updated | Oct 9, 2018 5:46:36 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Major |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
Hi all!
My suggestion would be to add a default property initialization to a constructor (or multiple)from quick action.
For example:
public string Query{get;set;}
public List<MyClass> MyList{get;set;}
Press ALT+ENTER on the query and it will create a constructor (if not present - default) or add a default initialization to the existing one.
result:
public MyClassName(){
Query = "";
MyList = new List<MyClass>();
}
This functionality would be awesome. I tryed to make my own plugin, but had problem with reference types. Works great with simple value types though.
My suggestion would be to add a default property initialization to a constructor (or multiple)from quick action.
For example:
public string Query{get;set;}
public List<MyClass> MyList{get;set;}
Press ALT+ENTER on the query and it will create a constructor (if not present - default) or add a default initialization to the existing one.
result:
public MyClassName(){
Query = "";
MyList = new List<MyClass>();
}
This functionality would be awesome. I tryed to make my own plugin, but had problem with reference types. Works great with simple value types though.
↧
↧
RSRP-338984: One step quickfix for ternary expression
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Feb 19, 2013 6:13:24 PM |
Updated | Oct 9, 2018 5:52:52 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Submitted |
Type | Feature |
Fix version | Backlog |
Affected versions | 2018.3 |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
I would like to see a one step refactor of this:
HttpResponseMessage response;To
response = errorMessage.Length == 0 ? Request.CreateResponse(HttpStatusCode.OK, "") : Request.CreateErrorResponse(HttpStatusCode.Forbidden, errorMessage.ToString());
return response;
return errorMessage.Length == 0
? Request.CreateResponse(HttpStatusCode.OK, "")
: Request.CreateErrorResponse(HttpStatusCode.Forbidden,
errorMessage.ToString());
↧
RSRP-339267: When using the Linq DistinctBy method and no property is specified, the DistinctBy can be replaced by the Distinct method
Reporter | Alexander Kurakin (Alexander.Kurakin) |
---|---|
Created | Feb 28, 2013 12:44:53 PM |
Updated | Oct 9, 2018 6:00:20 PM |
Resolved | Oct 9, 2018 6:00:20 PM |
Subsystem | Quick Fixes |
Assignee | Alisa Afonina (alisa.afonina) |
Priority | Normal |
State | Obsolete |
Type | Feature |
Fix version | Backlog |
Affected versions | No Affected versions |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
I have a suggestion for a situation that I believe could be highlighted for improvement by Resharper.
When using the Linq DistinctBy method and no property is specified, the DistinctBy can be replaced by the Distinct method (which looks cleaner).
For example:
When using the Linq DistinctBy method and no property is specified, the DistinctBy can be replaced by the Distinct method (which looks cleaner).
For example:
var myInts = new int[] {0, 1, 2, 2, 3, 3, 3};
// This:
var myDistinct = myInts.DistinctBy(i => i);
// can be replaced by:
var myDistinct = myInts.Distinct();
↧
RSRP-434149: Complete statement doesn't work with a multi-line statement
Reporter | Dmitry Matveev (Dmitry.Matveev) |
---|---|
Created | Feb 24, 2015 6:26:47 PM |
Updated | Oct 9, 2018 6:01:31 PM |
Subsystem | Complete Statement |
Assignee | Slava Tutushkin (slava.tutushkin) |
Priority | Normal |
State | Submitted |
Type | Bug |
Fix version | Backlog |
Affected versions | No Affected versions |
Fixed In Version ReSharper | Undefined |
VsVersion | All Versions |
Take this code
But if the initial code is written like this
var doc = new XDocument();and press Ctrl+Shift+Enter. Works fine, right?
doc.Add(new XElement("Person", new XAttribute("age", "20"{caret}
But if the initial code is written like this
var doc = new XDocument();then Ctrl+Shift+Enter. fails to complete the statement correctly
doc.Add(new XElement("Person",
new XAttribute("age", "20"{caret}
↧