使用AutoMapper自动映射

安装Nuget包 通过.Net CLI安装 dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection --version 8.1.0 该包会自动安装AutoMapper的依赖包。 配置AutoMapper 在Startup.cs的ConfigureServices方法中配置: services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //也可以如下指定项目: //services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.Location.Contains("ExampleSolution.Model"))); 接下来在ConfigureServices中添加: services.AddAutoMapperProfiles(Configuration); 然后为每个需要映射的类之间添加配置,如: public class ExmapleProfile : Profile { public ExmapleProfile() { //这里的映射方向是单向的,如不需要从ExmapleViewModel转Exmaple,则第二条就可以不用写 CreateMap<Exmaple, ExmapleViewModel>(); CreateMap<ExmapleViewModel, Exmaple>(); } } 使用 通过构造函数注入: private readonly IMapper _mapper; public ExmapleController(IMapper mapper) { _mapper = mapper; } 使用: public ActionResult ExmapleMethod() { ...... Exmaple entity = new Exmaple(); ExmapleViewModel entityVM = _mapper.Map<ExmapleViewModel>(entity); ...... }

January 15, 2021 · 1 分钟 · Remo

C#中的 explicit 和 implicit 关键字

简单记录一下。 explicit explicit 用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如如下类型: public class StringCombine { private readonly string _firstString; private readonly string _secondString; public StringCombine(string firstString, string secondString) { this._firstString = firstString; this._secondString = secondString; } public string Combine() { return $"{_firstString} {_secondString}"; } } 可以看到StringCombine类中有一个Combine()方法,用于将该类中的两个私有成有组合后输出: StringCombine stringCombine = new StringCombine("Hello", "world!"); string newString = stringCombine.Combine(); Console.WriteLine(newString); 如上代码将会输出Hello world!。 现在我们在StringCombine类中添加一段代码: public static explicit operator string(StringCombine stringCombine) { return stringCombine.Combine(); } 这时我们稍稍修改一下上面的代码: StringCombine stringCombine = new StringCombine("Hello", "world!...

January 21, 2020 · 1 分钟 · Remo

【转】C#基础小知识之 yield 关键字

转自博客:一天两天三天 对于yield关键字我们首先看一下 msdn 的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问器是迭代器。 通过使用 yield 定义迭代器,可在实现自定义集合类型的 IEnumerable 和 IEnumerator 模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 IEnumerator)。 yield是一个语法糖 看 msdn 的解释总是让人感觉生硬难懂。其实 yield 关键字很好理解。首先我们对于性质有个了解。yield 是一个语法糖。既然 yield 是在C#中的一个语法糖,那么就说明yield是对一种复杂行为的简化,就是将一段代码简化为一种简单的形式,方便我们程序员使用。 那么yield到底是对什么行为的简化。我们首先来看一下yield的使用场景。 还是来看msdn上的例子。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { foreach (int i in Power(2, 8, "")) { Console.Write("{0} ", i); } Console.ReadKey(); } public static IEnumerable<int> Power(int number, int exponent, string s) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } yield return 3; yield return 4; yield return 5; } } } 这是msdn上yield的一种使用场景。...

August 16, 2019 · 5 分钟 · Remo

【转】C# 之 匿名方法

转自http://www.cnblogs.com/daxnet/archive/2008/11/12/1687011.html 匿名方法是C# 2.0的语言新特性。首先看个最简单的例子: ...

January 9, 2017 · 2 分钟 · Remo

利用GIf89a标记伪装为图片文件

昨天说到利用C#代码来判断上传文件的真实格式,以免别有用心者通过修改后缀名的手段来上传木马。 不过,在实际运用过程中,发现该方法无法防范利用“GIf89a”标记伪装为图片文件这种手段。只需在asp文件头部加上“GIF89a”这6个字符,即可让上述代码将文件判定为GIF文件,从而进行上传。 目前尚未找到较好的方式来排除这种伪装手段,只能暂时禁止了所有的gif上传,安全为先。*

January 9, 2017 · 1 分钟 · Remo