none
asp.net RRS feed

  • 问题

  • public static object Eval(object container, string expression) 

        if (expression == null) 
        { 
            throw new ArgumentNullException("expression"); 
        } 
        expression = expression.Trim(); 
        if (expression.Length == 0) 
        { 
            throw new ArgumentNullException("expression"); 
        } 
        if (container == null) 
        { 
            return null; 
        } 
        string[] expressionParts = expression.Split(expressionPartSeparator); 
        return Eval(container, expressionParts); 
    }
     
    private static object Eval(object container, string[] expressionParts) 

        object propertyValue = container; 
        for (int i = 0; (i < expressionParts.Length) && (propertyValue != null); i++) 
        { 
            string propName = expressionParts[i]; 
            if (propName.IndexOfAny(indexExprStartChars) < 0) 
            { 
                propertyValue = GetPropertyValue(propertyValue, propName); 
            } 
            else
            { 
                propertyValue = GetIndexedPropertyValue(propertyValue, propName); 
            } 
        } 
        return propertyValue; 
    }
     
    public static string Eval(object container, string expression, string format) 

        object obj2 = Eval(container, expression); 
        if ((obj2 == null) || (obj2 == DBNull.Value)) 
        { 
            return string.Empty; 
        } 
        if (string.IsNullOrEmpty(format)) 
        { 
            return obj2.ToString(); 
        } 
        return string.Format(format, obj2); 
    }
     
    public static object GetDataItem(object container) 

        bool flag; 
        return GetDataItem(container, out flag); 
    }


    public virtual void DataBind() 

        this.DataBind(true); 

    protected virtual void DataBind(bool raiseOnDataBinding) 

        bool flag = false; 
        if (this.IsBindingContainer)
        { 
            bool flag2; 
            object dataItem = DataBinder.GetDataItem(this, out flag2);
            if (flag2 && (this.Page != null))
            { 
                this.Page.PushDataBindingContext(dataItem);) 
                flag = true; 
            } 
        } 
        try
        { 
            if (raiseOnDataBinding) 
            { 
                this.OnDataBinding(EventArgs.Empty); 
            } 
            this.DataBindChildren();
        } 
        finally
        { 
            if (flag) 
            { 
                this.Page.PopDataBindingContext();
            } 
        } 
    C# code?
    1
     

    谁能给我详细解释一下上面代码的意思

    please verify my account

    2015年1月23日 0:11

答案

  • 你好,

    是一段数据绑定的代码,成功之后返回一些dataitem。 你要解释那一段啊。

    • 已标记为答案 lctk 2015年2月4日 10:34
    2015年1月24日 14:07
  • 您好,

    我建议,您能够调试你的代码,传入对应的值到函数中去,去理解函数的意义

    • 已标记为答案 lctk 2015年2月4日 10:34
    2015年1月26日 2:39

全部回复

  • 你好,

    是一段数据绑定的代码,成功之后返回一些dataitem。 你要解释那一段啊。

    • 已标记为答案 lctk 2015年2月4日 10:34
    2015年1月24日 14:07
  • 你好,

    我想知道这段代码的逻辑是什么样的?比如:  if (expression == null) 
        { 
            throw new ArgumentNullException("expression"); 
        } 
        expression = expression.Trim(); 
        if (expression.Length == 0) 
        { 
            throw new ArgumentNullException("expression"); 
        } 
        if (container == null) 
        { 
            return null; 
        } 
        string[] expressionParts = expression.Split(expressionPartSeparator); 
        return Eval(container, expressionParts); 

    expression == null”是判断什么?container == null?是判断什么?string[] expressionParts = expression.Split(expressionPartSeparator); 什么作用?

    private static object Eval(object container, string[] expressionParts) 和上一个什么关系?还有public static string Eval(object container, string expression, string format) 为什么写这么多方法?


    please verify my account

    2015年1月25日 3:42
  • 您好,

    我建议,您能够调试你的代码,传入对应的值到函数中去,去理解函数的意义

    • 已标记为答案 lctk 2015年2月4日 10:34
    2015年1月26日 2:39