목록c# (23)
A-Dyu의 개발 일기장
CS0308,CS0305 오류는 모두 제네릭에 관련된 오류다.CS0308은 제네릭이 아닌 클래스 또는 메서드에서 형식 인수를 사용할 때 일어난다.//일반 클래스class MyClass{ //member valuable, method}class Program{ public static void Main(string[] args){ MyClass myClass = new MyClass();//CS0308 //제네릭 클래스가 아니지만 형식 인수를 사용함 }}CS0305는 반대로 형식 인수가 필요한 클래스 또는 메서드에서 형식 인수 없이 사용했을때 일어난다.//제네릭 클래스class MyClass{ //member valuable, method}class Progr..
리터럴이란 소소 코드상에서 직접적으로 값을 나타내는 고정된 값들을 의미한다.12나 "string"처럼 어떤 값인지 그 자체로 표현하는 모든 식별자를 뜻한다.상수랑 헷갈릴 수 있지만, 리터럴과 상수는 개념적으로 차이가 있다.리터럴은 소스 코드 상에서 값이 고정되며, 표현이 바뀌면 그에 따라 값이 바뀐다.즉 특정 표현은 어떤 코드라도, 어떤 프로젝트라도 절대로 값이 바뀌지 않는다.즉, 이미 소스 코드에 작성한 순간부터 값이 정해진 것이라고 보면 된다.하지만 상수(const)는 컴파일 시점에 값이 결정되며, 컴파일 전까진 값이 유동적으로 변한다.즉 const는 컴파일 시점에 리터럴로 바뀌어 컴파일된다. 실제로 컴파일 된 IL코드를 보면 모든 const값이 리터럴로 바뀐걸 볼 수 있다.리터럴은 다양한 표현식이 ..
C# 9.0부터 추가된 최상위 문을 사용할때 처음 보는 오류가 일어났다.그래서 자주 본 오류들 이유와 해결 방법들 기록함. CS8801이건 최상위 문에서 선언된 변수를 다른 클래스에서 접근할때 일어난다.int i = 10;pubilc class Test{ void method() { i = 10; //CS8801 }}그 이유는 결국은 최상위 문도 진입점이 있는 클래스로 변환되는데, 선언되는 변수들은 결국 Main 메서드의 지역변수로 선언되는것이기 때문이다.pubilc class Program{ static void Main(string[] args) { int i = 10; }}pubilc class Test{ void method() ..
C#의 System.Math을 상요할 때 가장 많이 쓰이는 게 반올림, 올림, 내림, 버림 기능인데, 어떻게 사용하는지 알아보겠다.1.올림Console.WriteLine(Math.Ceiling(1.4)); //2Console.WriteLine(Math.Ceiling(-1.5));//-12.내림Console.WriteLine(Math.Floor(1.4)); //1Console.WriteLine(Math.Floor(-1.5));//-23.버림Console.WriteLine(Math.Truncate(1.4)); //1Console.WriteLine(Math.Truncate(-1.5));//-1버림과 내림의 차이는 바로 음수에서 나오는데,내림은 말 그대로 음수면 1을 내리지만 버림은 소수점을 무시한다.4.반올림..
List에 요소를 추가, 수정, 삭제하는법1.추가List list = new List();list.Add(3); //list 맨 끝에 삽입list.Insert(0, 1);//list 시작 부분에 삽입list.Insert(1, 2);//list 중간에 삽입 2.수정가장 간단하다list[1] = 5;//두 번째 요소를 5로 바꿈3.삭제list.Remove(1); //특정 값을 제거(중복된다면 가장 첫번째를)list.RemoveAll(3); //특정 값을 모두 제거list.RemoveAt(0);//첫 번째 요소를 제거
이 오류는 생성한 대리자와 인수 개수가 일치하지 않아 생긴 오류다.delegate string func(int i); //선언된 인수 1개의 대리자 internal class Program{ static void Main(string[] args) { func fun = (x, y) => $"{x}";//람다식의 인수가 2개라 오류 발생 fun(1, 2);//호출할 때 인수가 2개라 오류 발생 }}
리스트같이 인덱스로 접근하거나 합수로 접근하고 구조체의 값을 수정하려고 하니 이 오류가 뜬다.public struct MyStruct{ public string Name; public MyStruct(string name) { Name = name; }}internal class Program{ static void Main(string[] args) { List list = new List() { new MyStruct("ADyu") }; list[0].Name = "Name";//오류 발생 }}이 오류는 변수가 아닌 값을 수정하기 떄문인데,구조체같이 값 형식은 반환값을 불러올 때. ..
List의 전체 또는 일부를 복사하고 싶을 때 CopyTo메서드를 사용하면 된다.CopyTo의 오버로드는 3가지가 있는데,모든 오버로드를 살펴보겠다.1.배열의 처음부터 끝까지 복사.단순히 인자로 붙여넣기할 배열을 집어넣은면 된다.그러면 리스트의 처음부터 끝까지 복사한다.이때, 배열의 길이가 리스트의 크기보다 작으면 오류가 일어난다.int[] array = new int[5];List list = new List(){ 1,2,3,4};list.CopyTo(array); //1, 2, 3, 4, 02.배열의 중간부터 끝까지 복사.1번의 오버로드에서 인자가 하나 더 생겼는데, 바로 붙여넣기를 시작할 인덱스다.인자로 1을 넣으면 배열의 2번째부터 들어가는 방식이다.int[] array = new int[5..