class BaseRepository<TEntity, TKey>
where TEntity: class
{
...
public TEntity GetById(TKey id)
{
_context.Set<TEntity>().Find(id); // в случае EF
}
...
}
class TranslationRepository: BaseRepository<Translation, int>, ITranslationRepository
{ ... }
а оператор new мы не использовали
using System;
using System.Reflection;
public class Program
{
public static void Main()
{
MoveObject obj = UnityFactory.GetInstance<MoveObject>();
obj.moveObject.SayHello();
}
}
public class GameObject
{
private string name;
public GameObject()
{
name = "John";
}
public void SayHello() {
Console.WriteLine("Hello! My name is " + name );
}
}
public class MoveObject
{
public GameObject moveObject;
}
public class UnityFactory {
public static T GetInstance<T>() where T: new()
{
// Создадим экземпляр основного класса
T instance = (T)Activator.CreateInstance(typeof(T));
// Инициализируем его открытые поля
FieldInfo[] fields = typeof(T).GetFields();
foreach (FieldInfo field in fields)
{
object fieldValue = Activator.CreateInstance(field.FieldType);
field.SetValue(instance, fieldValue);
}
return instance;
}
}
ConfigurationManager
, обернув его в "фасад" IConfiguration
с соответствующими методами доступа, а его уже мокать.interface IConfiguration
{
string ConnectionString { get; }
}
class AppSettingsConfiguration: IConfiguration
{
public string ConnectionString
{
get
{
return ConfigurationManager.AppSettings["ConnectionString"];
}
}
}
var config = new Mock<IConfiguration>();
config.Setup(x => x.ConnectionString).Returns("test value");
AddCategory
мок репозитория всегда дает result == null
и, соответственно, null
возвращается, тест падает.var model = new CategoryModel { ... };
var categoryModelRepository = new Mock<ICategoryModelRepository>();
categoryModelRepository.Setup(x => x.AddCategory(model))
.Returns(model);
// Или
categoryModelRepository.Setup(x => x.AddCategory( It.IsAny<CategoryModel>() ))
.Returns(model);
// Act...
Assert.IsNotNull(result);
особенности Mono...её отличия от "оригинальной" .Net
Троелсен упоминает о "серьёзных оговорках" при компиляции языков, удовлетворяющих требованиям спецификации CLI в CIL.
не могли бы вы посоветовать книги для изучения С# имено под веб ?
gt
в тот момент, когда передаете его в Foo
, где его значение копируется в параметр int x
.Foo
не знает, откуда берется значение, ведь оно приходит через формальный параметр. Если же вы будете обращаться к свойству напрямую, то все будет так, как вы ожидаете:static void Foo(int z/*, int x*/)
{
Console.WriteLine("метод");
if (z >= 10)
{
Console.WriteLine("переменная больше 10");
}
else
{
Console.WriteLine("переменная = " + gt);//x);
}
}
1) С# или Visual C#?
2) Что такое платформа .NET Framework?
3) Недавно прочитал про .NET CORE.
ArrayList
без весомой на то необходимости. Поэтому компилятор не смог вас предупредить, что ArrayList
состоит из ArrayList
'ов, в котором строки (двумерный массив строк), а не просто строк.ArrayList
необходимо использовать типизированный динамический массивList<string>
.public void Click_OpenFile()
{
string fileName = form1.OpenFie();
IList<string[]> aL = ParseFile(fileName);
foreach (var line in aL)
{
// Снова собираем токены в строки
MessageBox.Show(string.Join(" ", line));
}
}
// Читаем файл и построчно парсим его
private IList<string[]> ParseFile(string fileName)
{
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentNullException(nameof(fileName));
}
if (!File.Exists(fileName))
{
throw new ArgumentException($"There is no file {fileName}!");
}
string[] fileContent = File.ReadAllLines(result);
var aL = new List<string[]>(fileContent.Length);
foreach (var line in fileContent)
{
aL.Add(ParseString(line));
}
return aL;
}
// Разбиваем строки на токены
private string[] ParseString(string s)
{
const char delimiter = '|';
return s.Split(delimiter);
}