小编Zul*_*lie的帖子

通用方法返回类型作为类型参数

我有一个扩展方法,可以将字符串值转换为各种类型,看起来像这样:

public static T ToType<T> (this string value, T property)
    {
        object parsedValue = default(T);
        Type type = property.GetType();

        try
        {
            parsedValue = Convert.ChangeType(value, type);
        }
        catch (ArgumentException e)
        {
            parsedValue = null;
        }

        return (T)parsedValue;
    }
Run Code Online (Sandbox Code Playgroud)

但是,我对调用该方法时的外观方式不满意:

myObject.someProperty = stringData.ToType(myObject.someProperty);
Run Code Online (Sandbox Code Playgroud)

仅仅为了获取属性的类型而指定属性似乎是多余的.我宁愿使用这样的签名:

public static T ToType<T> (this string value, Type type) { ... }
Run Code Online (Sandbox Code Playgroud)

并且T最终为类型类型.这会使通话变得更加清洁:

myObject.someProperty = stringData.ToType(typeof(decimal));
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试以这种方式调用时,编辑器会抱怨扩展方法的返回类型不能被使用.我可以将T链接到Type参数吗?

我错过了什么?

谢谢

.net c# generics

11
推荐指数
1
解决办法
3万
查看次数

MVC3 DbContext保存后获取新模型的ID?

我有一个与Product_Tag型号有1:n关系的型号产品.我也有一个模型Tag与Product_Tag有1:n的关系.

class Product{
  int ID {get;set;}
  public virtual ICollection<Product_Tag> productTag {get;set;}
}

class Tag {
  int ID {get;set;}
  public virtual ICollection<Product_Tag> productTag {get;set;}

}

class Product_Tag {
  int ID {get;set;}
  int ProductID{get;set;}
  int TagID {get;set;}
  public virtual Product product {get;set;}
  public virtual Tag tag {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

保存新产品时,我希望能够将任何关联保存到Product_Tags中的标签.Product_Tag需要PRoductID和TagID.我在保存时可以使用TagID,但ProductID将来自新创建的产品.保存新产品后如何立即获取新创建的产品ID?

或者,有没有办法只使用只有TagID的productTag保存Product模型并获取DbContext来为我填写ProductID?

asp.net-mvc dbcontext

4
推荐指数
1
解决办法
3854
查看次数

Visual Studio项目:属性/设置.设置丢失

我从源代码控制中检出了一个解决方案并在Visual Studio中打开它.我的假设是这个解决方案在一次(两年前)编译并被部署.

有一个项目包含数据集,我称之为"数据集项目".数据集具有在Designer.cs文件中的InitConnection()方法中定义的连接字符串,这些文件正在查找"属性"命名空间.

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    private void InitConnection() {
        this._connection = new global::System.Data.SqlClient.SqlConnection();
        this._connection.ConnectionString = global::<some namespace>.Properties.Settings.Default.<some connectionStringName>;
    }
Run Code Online (Sandbox Code Playgroud)

在解决方案资源管理器中,我看到一个看似"丢失"的Settings.settings文件.实际上,当我检查它的内容时,Properties文件夹是空的.缺少的设置是每个数据集中的编译错误.

我试图将数据集的连接字符串设置为None,但它尝试将新值保存到.settings文件,该文件失败并显示"警告22自定义工具'SettingsSingleFileGenerator'在处理文件'属性\时失败Settings.settings'.
"message - 表面上是因为缺少.settings文件.

稍微挖掘一下,就会发现在引用数据集项目的另一个项目中找到的连接字符串的完整补充.但是数据集项目没有(循环地)引用这个其他项目,并且无法使用我所知道的连接字符串.

是否可以为数据集项目重新生成.settings文件?有人会先删除.settings的原因吗?

谢谢!

connection-string dataset properties.settings settings.settings visual-studio

2
推荐指数
1
解决办法
3507
查看次数