如何将动态对象设置为正确的类型

本文关键字:类型 设置 动态 对象 | 更新日期: 2023-09-27 18:16:44

这是移动滚动条的函数(我有一个水平滚动条和一个垂直滚动条)

    private void moveTheScroll(object sbar, int scrollDiff)
    {
        if (sbar is HScrollBar)
        {
            int newScrollvalue = ((HScrollBar)sbar).Value + scrollDiff;
            if (((HScrollBar)sbar).Minimum < newScrollvalue &&
                newScrollvalue < ((HScrollBar)sbar).Maximum)
                ((HScrollBar)sbar).Value = newScrollvalue;
        }
        else if (sbar is VScrollBar)
        {
            int newScrollvalue = ((VScrollBar)sbar).Value + scrollDiff;
            if (((VScrollBar)sbar).Minimum < newScrollvalue &&
                newScrollvalue < ((VScrollBar)sbar).Maximum)
            ((VScrollBar)sbar).Value = scrollDiff;
        }
    }

是否有一种方法来不类型转换对象每次我想使用它,而使别名代替?类似于这个(这个不起作用,因为v不能初始化)

var v;
if(sbar is HScrollBar)
    v = (HScrollBar)sbar;
else if(sbar is VScrollBar)
    v = (VScrollBar)sbar;
v.Value = newValue;

如何将动态对象设置为正确的类型

如果两种类型都继承自Scrollbar类,那么您只需要执行一次强制转换:

private void moveTheScroll(object sbar, int scrollDiff)
{
    var scrollBar = sbar as ScrollBar;
    if(scrollBar != null)
    {
         int newScrollvalue = scrollBar.Value + scrollDiff;
         // do other works with scrollBar...
    }
}