Название ограничений в F#C#

Место общения программистов C#
Ответить
Anonymous
 Название ограничений в F#

Сообщение Anonymous »

В C# WPF мы можем использовать имя, как в < /p>
public class MyControl : Control
{
private static readonly DependencyProperty _myProperty =
DependencyProperty.Register(nameof(MyProperty), typeof(int), typeof(MyControl));

public int MyProperty
{
get => (int)GetValue(_myProperty);
set => SetValue(_myProperty, value);
}
}
< /code>
Но в F# это не работает < /p>
type MyControl() as this =
inherit Control()

static let _myProperty =
DependencyProperty.Register(nameof MyProperty, typeof, typeof) //The value or constructor 'Bars' is not defined.

member this.MyProperty
with get() = this.GetValue(_myProperty) :?> int
and set(value: int) = this.SetValue(_myProperty, value)

< /code>
Самый простой способ - использовать строку «myproperty», но это обладает печально известным эффектом, склонным к ошибке при переименовании свойства, если мы забываем изменить строку. < /p>
Есть ли способ сохранить название безопасности, которое C# дает в f#?open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Quotations.Patterns

let getPropertyName (expr: Expr) =
match expr with
| Lambda(_, PropertyGet(_, propInfo, _)) -> propInfo.Name
| _ -> failwith "Invalid expression: Expected a property getter."

type MyControl() as this =
inherit Control()

static let _myProperty =
DependencyProperty.Register(getPropertyName c.MyProperty @>, typeof, typeof)

member this.MyProperty
with get() = this.GetValue(_myProperty) :?> int
and set(value: int) = this.SetValue(_myProperty, value)
< /code>
Но это явно громоздко. Есть лучший способ?

Подробнее здесь: https://stackoverflow.com/questions/793 ... imits-in-f
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»