Решение для перегруженного ограничения оператора в дженериках.NET

В вашем конкретном примере вы просто получаете ширину элемента и передаете его другому элементу. Если вы используете последнюю версию реагирования, вы должны проверить api новой ссылки ( https://reactjs.org/docs/refs-and-the-dom.html ) И ваш пример будет выглядеть примерно так [ 112]

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      width: 0
    };
    this.parentRef = React.createRef();
  }
  componentDidMount() {
    window.addEventListener("resize", this.onResize);
    this.onResize();
  }
  componentWillUnmount() {
    window.removeEventListener("resize", this.onResize);
  }
  onResize = () => {
    this.setState({
      width: this.getParentSize()
    });
  };
  getParentSize() {
    return (this.parentRef.current && this.parentRef.current.offsetWidth) || 0;
  }
  render() {
    return (
      
); } } ReactDOM.render(, document.getElementById("root"));

33
задан blackwing 29 September 2008 в 05:37
поделиться

1 ответ

Нет никакого непосредственного ответа; операторы статичны, и не могут быть выражены в ограничениях - и существующие примитивы не реализуют определенного интерфейса (контраст по отношению к IComparable [< T>], который может использоваться для эмуляции больше - чем / меньше).

Однако; если Вы просто хотите, чтобы это работало, то в.NET 3.5 существуют некоторые опции...

я соединил библиотеку здесь , который предоставляет эффективный и простой доступ к операторам с дженериками - такими как:

T result = Operator.Add(first, second); // implicit <T>; here

Это может быть загружено как часть MiscUtil

Кроме того, в C# 4.0, это становится возможным через dynamic:

static T Add<T>(T x, T y) {
    dynamic dx = x, dy = y;
    return dx + dy;
}

у меня также была (однажды).NET 2,0 версии, но это менее тестируется. Другая опция состоит в том, чтобы создать интерфейс такой как [1 112]

interface ICalc<T>
{
    T Add(T,T)() 
    T Subtract(T,T)()
} 

и т.д., но затем необходимо передать ICalc<T>; через все методы, который становится грязным.

43
ответ дан 27 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: