Tôi đang thử khả năng tạo mã của Roslyn bằng cách sử dụng LinqPad để chạy các đoạn. Phương thức mở rộng .Dump() của LinqPad làm cho khung nhìn được định dạng của đối tượng thành ô Result.Có phải Roslyn's ".WithFooToken()" gọi là không cần thiết?
Mã được tạo bởi http://roslynquoter.azurewebsites.net/ bao gồm nhiều mã dường như không làm được gì khác ngoài việc thêm sưng lên. Mã sau xuất ra return null;
cho dù các cuộc gọi .WithFooToken(...)
có được nhận xét hay không.
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
var syn =
SyntaxFactory.ReturnStatement(
SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)
// .WithToken(SyntaxFactory.Token(SyntaxKind.NullKeyword))
)
// .WithReturnKeyword(
// SyntaxFactory.Token(SyntaxKind.ReturnKeyword)
// )
// .WithSemicolonToken(
// SyntaxFactory.Token(SyntaxKind.SemicolonToken)
// )
;
syn.NormalizeWhitespace().ToFullString().Dump();
Các cuộc gọi đó có bắt buộc cho tất cả ngôn ngữ hoặc chỉ cho các ngôn ngữ có mặc định hợp lý được xây dựng trong thư viện hỗ trợ Roslyn của họ không?
Các cuộc gọi đó chắc chắn hữu ích trong các trường hợp như 'return/**/null;'. Về lý do tại sao chúng được bao gồm luôn, có lẽ vì lý do nào đó khó phân biệt hai trường hợp? – svick
Một kịch bản mà tôi cho rằng nó có thể quan trọng là khi mã chỉ được xây dựng một phần. Theo mặc định, nó giả sử từ khóa 'return' và dấu chấm phẩy ở đó để nó thêm chúng theo mặc định - nhưng nếu dấu chấm phẩy chưa được gõ thì sao? 'syntax = syntax.WithSemicolonToken (SyntaxFactory.MissingToken (SyntaxKind.SemicolonToken));' –