Как конвертировать EventCallback <T>в EventCallback <bool> - PullRequest
0 голосов
/ 26 мая 2019

Blazor имеет универсальный класс с именем EventCallback

Как я могу разыграть

protected EventCallback<T> ValueChanged { get; set; }

в

EventCallback<bool> BoolChanged
   {
     get
     {
       if (typeof(T) == typeof(bool))
         return ValueChanged; //<== Error needs cast some how?
     }
   }

Ответы [ 3 ]

1 голос
/ 27 мая 2019

@ Стивен, может ли следующий код представить и уточнить ваш вопрос?

предположим, у меня есть следующие компоненты

@*Parent.razor*@

@page "/Parent"

<div>
    <Child Data="@Data" ValueChanged="@ValueChanged">
    </Child>
</div>

@functions {
    List<Item> Data = new List<Item>();

    private void ValueChanged(Item item)
    {        
    }
}


    @*Child.razor*@

@typeparam TData

<div>
    @foreach (var item in Data)
    {
        <button onclick="@(() => ValueChanged.InvokeAsync(item))"></button>
    }
</div>

@functions {
    [Parameter]
    public IEnumerable<TData> Data { get; set; }

    [Parameter]
    protected EventCallback<TData> ValueChanged { get; set; }
}




  // Item.cs
public class Item
{
     public Item()
     {

     }
}

Как видите, у меня есть два компонента, и я использую дженерики (typeparam) с EventCallback ... Теперь я хочу определить свойство EventCallback с помощью метода доступа get, который проверяет, является ли тип TData типом bool, и если это делает, покрывает делегат ValueChanged EventCallback

EventCallback<bool> BoolChanged { 
    get 
    { 
       if (typeof(TData) == typeof(bool)) return ValueChanged; // Needs conversion, but how
    } 
 } 
0 голосов
/ 29 мая 2019

Спасибо Леви Бродерику через Twitter за ответ.

protected EventCallback<bool> BoolChanged => (EventCallback<bool>)(object)ValueChanged;

Он заявляет: «Пропуск объекта через объект - это в основном идиома C # для« Я знаю, что компилятор не может рассуждать об этом во время компиляции », но попробуйте в любом случае во время выполнения, и я допускаю, что может возникнуть исключение. "

0 голосов
/ 26 мая 2019

Вы когда-нибудь пробовали

(EventCallback<bool>)ValueChanged;

Убедитесь, что тип ValueChanged в этом случае EventCallback<bool>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...